|
Antwort |
Registriert seit: 19. Apr 2006 Ort: Ilmenau 87 Beiträge RAD-Studio 2009 Pro |
#11
1. steh ich inzwischen auf dem Schlauch ^^
2. ist doch HSync in der bass.pas enthalten? 3. wie gemein, dass du mich jetzt dumm dastehen lässt... :p
Franz
|
Zitat |
EWeiss
(Gast)
n/a Beiträge |
#12
Zitat von Ducksoul:
1. steh ich inzwischen auf dem Schlauch ^^
2. ist doch HSync in der bass.pas enthalten? 3. wie gemein, dass du mich jetzt dumm dastehen lässt... :p Wenn HSync nicht enthalten gewesen wäre da es vorhin Probleme gab dann wäre Handle in diesen Fall DWord oder ? procedure SyncProc(Handle: DWord; Darauf wollte ich hinaus. gruss Emil |
Zitat |
Registriert seit: 19. Apr 2006 Ort: Ilmenau 87 Beiträge RAD-Studio 2009 Pro |
#13
Hiho,
ich danke dir für deine schnellen Antworten. Aber das ist es nicht (habs auch ausprobiert). Zum einen steht ja in der Doku, dass handle vom typ hsync ist und desweiteren habe ich in der bas.pas nachgeguckt. DWORD=HSYNC steht da ja drin und somit werden die beiden ja gleich behandelt. Nu muss ich wohl weiter schauen. Irgendwas hab ich sicher falsch definiert oder so. MfG
Franz
|
Zitat |
EWeiss
(Gast)
n/a Beiträge |
#14
Zitat von Ducksoul:
Hiho,
ich danke dir für deine schnellen Antworten. Aber das ist es nicht (habs auch ausprobiert). Zum einen steht ja in der Doku, dass handle vom typ hsync ist und desweiteren habe ich in der bas.pas nachgeguckt. DWORD=HSYNC steht da ja drin und somit werden die beiden ja gleich behandelt. Nu muss ich wohl weiter schauen. Irgendwas hab ich sicher falsch definiert oder so. MfG Ist schwer jetzt zu sagen an was es liegt. Aber richtig ist es auf jedenfall wie ich es dir mitgeteilt habe. Kannst dir ja mal mein Projekt BassVis von der un4Seen Seite laden In dem Sample habe ich es genauso geschrieben wie ich es dir erklärt habe und es funktioniert. EDIT: Hast denn var EndSync: HSYNC; aus procedure TRecordForm.PlayExecute(Sender: TObject); wieder rausgenommen ? Oder ist das noch drin. Manchmal sieht man den Wald vor lauter Bäume nicht.. Kann schon mal passieren gruss Emil |
Zitat |
EWeiss
(Gast)
n/a Beiträge |
#15
Denke habe den Fehler !!!
Setze mal die procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; über deine procedure TRecordForm.PlayExecute(Sender: TObject); dann müßte es laufen. EDIT: Eigentlich sollte man das procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; im Header nochmal definieren oder aber dafür sorgen das es Initialisiert wird bevor man drauf zugreift Also über die Function/Procedure setzen aus der sie aufgerufen wird.. gruss Emil |
Zitat |
Registriert seit: 19. Apr 2006 Ort: Ilmenau 87 Beiträge RAD-Studio 2009 Pro |
#16
Oh man,
das hat leider auch nicht geholfen. So sieht das bei mir jetzt alles aus:
Delphi-Quellcode:
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, ToolWin, ActnMan, ActnCtrls, ActnMenus, XPStyleActnCtrls, Buttons, Grids, ValEdit, ActnList, ShellCtrls, ImgList, Bass, BASS_FX, inifiles, ShellAPI, Menus; const cDefaultDevice = -1; // Default Device Identifier cSampleRate = 44100; // PCM-Audio cNumChannels = 2; // Stereo cBlockLength = 4; // 2*2 Bytes pro Speicherblock im Buffer cRecordingTime = 200; // Millisekunden (10 - 500 ms / Default 100 ms) c16BitAudio = 0; // Flag für 16 Bit Audio cMaxAudio = 32768; // maximaler Pegel bei 16 Bit cDefaultUser = 0; // UserIdentifier (not used) cDirectXPointer = nil; // Default-Pointer für DirectX Class Identifier Le = 0; // Left Channel Ri = 1; // Right Channel type WAVHDR = packed record riff: array[0..3] of Char; len: DWord; cWavFmt: array[0..7] of Char; dwHdrLen: DWord; wFormat: Word; wNumChannels: Word; dwSampleRate: DWord; dwBytesPerSec: DWord; wBlockAlign: Word; wBitsPerSample: Word; cData: array[0..3] of Char; dwDataLen: DWord; end; type TRecordForm = class(TForm) RecordControlBar: TControlBar; RecordMainMenu: TActionMainMenuBar; ListPnl: TPanel; RecordSplitter: TSplitter; RecorderPnl: TPanel; RecordTimer: TTimer; RecActionList: TActionList; Rec: TAction; Stop: TAction; Play: TAction; Start: TAction; Previous: TAction; Next: TAction; Ende: TAction; DiktatListView2: TShellListView; ToolActionManager: TActionManager; ActionToolBar1: TActionToolBar; RecImageList: TImageList; Save: TAction; RecSaveDialog: TSaveDialog; Open: TAction; OpenDialog1: TOpenDialog; RecImageList2: TImageList; MenuActionManager: TActionManager; VisualTimer: TTimer; RecGroupBox: TGroupBox; AufnahmeRadioGroup: TRadioGroup; EndRadioButton: TRadioButton; InsertRadioButton: TRadioButton; OverWriteRadioButton: TRadioButton; SettingsGroupBox: TGroupBox; InputLbl: TLabel; VolumeLbl: TLabel; VolumePegelBar: TTrackBar; RecordPegelBar: TTrackBar; VisPanel: TPanel; ProgressBar: TTrackBar; VisPaintBox: TPaintBox; SaveSend: TAction; SendAs: TAction; ShellPUM: TPopupMenu; DictSendAs: TMenuItem; DeletePrev: TAction; DeleteFollowing: TAction; InsPassage: TAction; procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; procedure FormActivate(Sender: TObject); procedure SaveSendExecute(Sender: TObject); procedure SendAsExecute(Sender: TObject); procedure DiktatListView2DblClick(Sender: TObject); procedure VisualTimerTimer(Sender: TObject); procedure OpenExecute(Sender: TObject); procedure SaveExecute(Sender: TObject); procedure EndeExecute(Sender: TObject); procedure StartExecute(Sender: TObject); procedure PlayExecute(Sender: TObject); procedure StopExecute(Sender: TObject); procedure RecExecute(Sender: TObject); procedure ProgressBarChange(Sender: TObject); procedure VolumePegelBarChange(Sender: TObject); procedure RecordPegelBarChange(Sender: TObject); procedure RecordTimerTimer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure StartRecording; procedure StopRecording; const um_MusicEnd = wm_User + 400; private EndSync: HSync; WaveStream: TMemoryStream; BufStream: TMemoryStream; ChannelVol: Integer; procedure ToggleStatus(const Status: Integer); procedure ReadConfig; protected procedure MusicEnd(var Msg: TMessage); message um_MusicEnd; public FRecordingsPath, User: string; AnhangDir: String; end; var RecordForm: TRecordForm; WaveHdr: WAVHDR; // WAV header rchan: HRECORD; // Aufnahmekanal chan: HSTREAM; // Wiedergabekanal mic: integer; volume: Float; input: Float;
Delphi-Quellcode:
Habe jetzt nochmal alles gepostet. Vielleicht habe ich ja irgendeine deiner Anweisungen falsch befolgt.
(******************************************************************************)
(* CallBack-Routine *) (******************************************************************************) (* Callback *) function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall; begin // Kopiere neuen Bufferinhalt in den Memory Buffer RecordForm.WaveStream.Write(buffer^, length); // Weiteres Aufnehmen erlauben Result := True; end; // function Callback (******************************************************************************) (* Start und Stop Aufnahme *) (******************************************************************************) (* Aufnahme Start *) procedure TRecordForm.StartRecording; var vol: Float; i: Integer; Flag: DWord; begin // Aufnahme je nach Aufnahmemodus if OverwriteRadioButton.Checked = True then begin if WaveStream.Size > 0 then begin // alte Aufnahme löschen BASS_StreamFree(chan); WaveStream.Clear; end; // if end else if InsertRadioButton.Checked = True then begin WaveStream.Position := ProgressBar.Position; end else if EndRadioButton.Checked = True then begin WaveStream.Position := WaveStream.Size; ProgressBar.Position := ProgressBar.Max; end; // if // Header für WAV-File generieren with WaveHdr do begin riff := 'RIFF'; len := 36; cWavFmt := 'WAVEfmt '; dwHdrLen := 16; wFormat := 1; wNumChannels := 2; dwSampleRate := 44100; wBlockAlign := 4; dwBytesPerSec := 176400; wBitsPerSample := 16; cData := 'data'; dwDataLen := 0; end; // with WaveStream.Write(WaveHdr, SizeOf(WAVHDR)); i := 0; vol := RecordPegelBar.Position/100; while BASS_RecordSetInput(i, BASS_INPUT_OFF, vol) do i := i + 1; // ---LoWord-- ----HiWord---- Flag := MakeLong(c16BitAudio, cRecordingTime); // Aufnahmebeginn @ 44100hz 16-bit stereo rchan := BASS_RecordStart(cSamplerate, cNumChannels, Flag, @RecordingCallback, nil); if rchan = 0 then begin MessageDlg('Aufnahme konnte nicht gestartet werden!', mtError, [mbOk], 0); WaveStream.Clear; end; end; // procedure StartRecording (* Stop recording *) procedure TRecordForm.StopRecording; var i: integer; begin BASS_ChannelStop(rchan); // WAV-Header komplettieren WaveStream.Position := 4; i := WaveStream.Size - 8; WaveStream.Write(i, 4); i := i - $24; WaveStream.Position := 40; WaveStream.Write(i, 4); WaveStream.Position := 0; // Stream für aufgenomme Daten kreieren chan := BASS_StreamCreateFile(True, WaveStream.Memory, 0, WaveStream.Size, 0); if chan <> 0 then begin ProgressBar.Max := WaveStream.Size; BASS_ChannelSetPosition(chan, ProgressBar.Max, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); end else begin MessageDlg('Fehler beim Erstellen eines Streams aus der Aufnahme!', mtError, [mbOk], 0); end; // if end; // procedure StopRecording (* RecordButtonClick || Start Aufnahme *) procedure TRecordForm.RecExecute(Sender: TObject); begin if BASS_ChannelIsActive(rchan) = BASS_Active_Stopped then // Aufnahme starten begin if BASS_ChannelIsActive(chan) <> BASS_Active_Stopped then begin BASS_ChannelStop(chan); ProgressBar.Position := ProgressBar.Max; StartRecording; end else begin ProgressBar.Position := ProgressBar.Max; StartRecording; end; // if ToggleStatus(8); end else if BASS_ChannelIsActive(rchan) = BASS_Active_Playing then // Aufnahme beenden begin StopRecording; ToggleStatus(3); end; end; //procedure RecExecute (* StopButtonClick || Stop Aufnahme *) procedure TRecordForm.StopExecute(Sender: TObject); begin case BASS_ChannelIsActive(chan) of BASS_Active_Stopped: begin BASS_ChannelSetPosition(chan, 0, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); ToggleStatus(3); end; // case BASS_Active_Stopped BASS_Active_Playing: begin BASS_ChannelStop(chan); BASS_ChannelSetPosition(chan, 0, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); ToggleStatus(3); end; // case BASS_Active_Playing BASS_Active_Paused: begin BASS_ChannelStop(chan); BASS_ChannelSetPosition(chan, 0, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); ToggleStatus(3); end; // case BASS_Active_Paused end; //case end; // procedure StopExecute procedure TRecordForm.SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; begin PostMessage(RecordForm.Handle, RecordForm.um_MusicEnd, 0, 0); end; (* PlayButtonClick || Wiedergabe der Aufnahme *) procedure TRecordForm.PlayExecute(Sender: TObject); begin case BASS_ChannelIsActive(chan) of BASS_Active_Stopped: begin BASS_ChannelPlay(chan, True); EndSync := Bass_ChannelSetSync(chan, Bass_SYNC_END, 0, @SyncProc, nil); ToggleStatus(1); end; BASS_Active_Playing: begin BASS_ChannelPause(chan); ToggleStatus(2); end; BASS_Active_Paused: begin BASS_ChannelPlay(chan, False); ToggleStatus(1); end; end; // case end; // procedure PlayExecute procedure TRecordForm.MusicEnd(var Msg: TMessage); begin // hier wird reingesprungen wenn der Stream endet // der mit .. MessageDlg('Dies ist ein Test.'); // vorher in deiner Play Function initialisiert wurde (**** nicht hier ****) // hier sollte dann dein Code stehen was du tun willst wenn der stream beendet ist. end; http://www.un4seen.com/forum/?topic=6913.0 -- Hier hatte schonmal einer das gleiche Problem. Aber bis jetz bin ich dadurch auch noch nicht auf die Lösung gekommen. Gruß
Franz
|
Zitat |
EWeiss
(Gast)
n/a Beiträge |
#17
Ja war auch ein teil von mir..
Schon sehr seltsam das ganze. Das du die procedure aber hoch setzen mußtest ist ok. gruss Emil |
Zitat |
Registriert seit: 4. Mai 2005 846 Beiträge Delphi 7 Enterprise |
#18
Ich hab das bei mir so gemacht
Delphi-Quellcode:
vieleicht hilft ja das
EndSync : HSync;
procedure EndOfFile(handle:HSYNC; Channel, Data, User:DWORD);stdcall; begin Ende:=True; end; EndSync:= Bass_ChannelSetSync(achannel, BASS_SYNC_END, 0, @EndOfFile, nil);
Blackheart
|
Zitat |
EWeiss
(Gast)
n/a Beiträge |
#19
Da ist was anderes wrong ..
Hab das mal so bei mir in ne Unit addiert. Harter Fehler Du kannst die SyncProc nicht in den Thread TRecordForm bugsieren... das geht nimmer. Wie willst du dann innerhalb TRecordForm auf die Message reagieren ??? Und wenn schon dann bitte EndSync := Bass_ChannelSetSync(chan, Bass_SYNC_END, 0, @TRecordForm.SyncProc, nil); Würde ich aber unterlassen Also machs mal so.. Schmeiß die SyncProc aus dem Thread raus ..
Delphi-Quellcode:
Da oder sonstwo einfügen..
DeletePrev: TAction;
DeleteFollowing: TAction; InsPassage: TAction; procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; // >>>>> entfernen
Delphi-Quellcode:
und das ändern ..
procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall;
var RecordForm: TRecordForm; WaveHdr: WAVHDR; // WAV header rchan: HRECORD; // Aufnahmekanal chan: HSTREAM; // Wiedergabekanal mic: integer; volume: Float; input: Float;
Delphi-Quellcode:
So habe ich dir das aber auch nicht gesagt das du die Sync(Callback) innerhalb des Thread TRecordForm einfügen sollst.
procedure TRecordForm.SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall;
begin PostMessage(RecordForm.Handle, RecordForm.um_MusicEnd, 0, 0); end;
Delphi-Quellcode:
Habs bei mir getestet und es wird dann nicht mehr nach einer Variablen gefragt.
procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall;
begin PostMessage(RecordForm.Handle, RecordForm.um_MusicEnd, 0, 0); end; EDIT:das besser auch ändern ... RecordForm.um_MusicEnd so wie mitgeteilt. nur um_MusicEnd nicht innerhalb der TRecordForm. nochmal das ganze !!
Delphi-Quellcode:
gruss Emil
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, ToolWin, ActnMan, ActnCtrls, ActnMenus, XPStyleActnCtrls, Buttons, Grids, ValEdit, ActnList, ShellCtrls, ImgList, Bass, inifiles, ShellAPI, Menus; const cDefaultDevice = -1; // Default Device Identifier cSampleRate = 44100; // PCM-Audio cNumChannels = 2; // Stereo cBlockLength = 4; // 2*2 Bytes pro Speicherblock im Buffer cRecordingTime = 200; // Millisekunden (10 - 500 ms / Default 100 ms) c16BitAudio = 0; // Flag für 16 Bit Audio cMaxAudio = 32768; // maximaler Pegel bei 16 Bit cDefaultUser = 0; // UserIdentifier (not used) cDirectXPointer = nil; // Default-Pointer für DirectX Class Identifier Le = 0; // Left Channel Ri = 1; // Right Channel um_MusicEnd = wm_User + 400; type WAVHDR = packed record riff: array[0..3] of Char; len: DWord; cWavFmt: array[0..7] of Char; dwHdrLen: DWord; wFormat: Word; wNumChannels: Word; dwSampleRate: DWord; dwBytesPerSec: DWord; wBlockAlign: Word; wBitsPerSample: Word; cData: array[0..3] of Char; dwDataLen: DWord; end; type TRecordForm = class(TForm) RecordControlBar: TControlBar; RecordMainMenu: TActionMainMenuBar; ListPnl: TPanel; RecordSplitter: TSplitter; RecorderPnl: TPanel; RecordTimer: TTimer; RecActionList: TActionList; Rec: TAction; Stop: TAction; Play: TAction; Start: TAction; Previous: TAction; Next: TAction; Ende: TAction; DiktatListView2: TShellListView; ToolActionManager: TActionManager; ActionToolBar1: TActionToolBar; RecImageList: TImageList; Save: TAction; RecSaveDialog: TSaveDialog; Open: TAction; OpenDialog1: TOpenDialog; RecImageList2: TImageList; MenuActionManager: TActionManager; VisualTimer: TTimer; RecGroupBox: TGroupBox; AufnahmeRadioGroup: TRadioGroup; EndRadioButton: TRadioButton; InsertRadioButton: TRadioButton; OverWriteRadioButton: TRadioButton; SettingsGroupBox: TGroupBox; InputLbl: TLabel; VolumeLbl: TLabel; VolumePegelBar: TTrackBar; RecordPegelBar: TTrackBar; VisPanel: TPanel; ProgressBar: TTrackBar; VisPaintBox: TPaintBox; SaveSend: TAction; SendAs: TAction; ShellPUM: TPopupMenu; DictSendAs: TMenuItem; DeletePrev: TAction; DeleteFollowing: TAction; InsPassage: TAction; procedure FormActivate(Sender: TObject); procedure SaveSendExecute(Sender: TObject); procedure SendAsExecute(Sender: TObject); procedure DiktatListView2DblClick(Sender: TObject); procedure VisualTimerTimer(Sender: TObject); procedure OpenExecute(Sender: TObject); procedure SaveExecute(Sender: TObject); procedure EndeExecute(Sender: TObject); procedure StartExecute(Sender: TObject); procedure PlayExecute(Sender: TObject); procedure StopExecute(Sender: TObject); procedure RecExecute(Sender: TObject); procedure ProgressBarChange(Sender: TObject); procedure VolumePegelBarChange(Sender: TObject); procedure RecordPegelBarChange(Sender: TObject); procedure RecordTimerTimer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); procedure StartRecording; procedure StopRecording; private EndSync: HSync; WaveStream: TMemoryStream; BufStream: TMemoryStream; ChannelVol: Integer; procedure ToggleStatus(const Status: Integer); procedure ReadConfig; protected procedure MusicEnd(var Msg: TMessage); message um_MusicEnd; public FRecordingsPath, User: string; AnhangDir: String; end; procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; var RecordForm: TRecordForm; WaveHdr: WAVHDR; // WAV header rchan: HRECORD; // Aufnahmekanal chan: HSTREAM; // Wiedergabekanal mic: integer; volume: Float; input: Float; implementation (******************************************************************************) (* CallBack-Routine *) (******************************************************************************) (* Callback *) function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall; begin // Kopiere neuen Bufferinhalt in den Memory Buffer RecordForm.WaveStream.Write(buffer^, length); // Weiteres Aufnehmen erlauben Result := True; end; // function Callback (******************************************************************************) (* Start und Stop Aufnahme *) (******************************************************************************) (* Aufnahme Start *) procedure TRecordForm.StartRecording; var vol: Float; i: Integer; Flag: DWord; begin // Aufnahme je nach Aufnahmemodus if OverwriteRadioButton.Checked = True then begin if WaveStream.Size > 0 then begin // alte Aufnahme löschen BASS_StreamFree(chan); WaveStream.Clear; end; // if end else if InsertRadioButton.Checked = True then begin WaveStream.Position := ProgressBar.Position; end else if EndRadioButton.Checked = True then begin WaveStream.Position := WaveStream.Size; ProgressBar.Position := ProgressBar.Max; end; // if // Header für WAV-File generieren with WaveHdr do begin riff := 'RIFF'; len := 36; cWavFmt := 'WAVEfmt '; dwHdrLen := 16; wFormat := 1; wNumChannels := 2; dwSampleRate := 44100; wBlockAlign := 4; dwBytesPerSec := 176400; wBitsPerSample := 16; cData := 'data'; dwDataLen := 0; end; // with WaveStream.Write(WaveHdr, SizeOf(WAVHDR)); i := 0; vol := RecordPegelBar.Position/100; while BASS_RecordSetInput(i, BASS_INPUT_OFF, vol) do i := i + 1; // ---LoWord-- ----HiWord---- Flag := MakeLong(c16BitAudio, cRecordingTime); // Aufnahmebeginn @ 44100hz 16-bit stereo rchan := BASS_RecordStart(cSamplerate, cNumChannels, Flag, @RecordingCallback, nil); if rchan = 0 then begin MessageDlg('Aufnahme konnte nicht gestartet werden!', mtError, [mbOk], 0); WaveStream.Clear; end; end; // procedure StartRecording (* Stop recording *) procedure TRecordForm.StopRecording; var i: integer; begin BASS_ChannelStop(rchan); // WAV-Header komplettieren WaveStream.Position := 4; i := WaveStream.Size - 8; WaveStream.Write(i, 4); i := i - $24; WaveStream.Position := 40; WaveStream.Write(i, 4); WaveStream.Position := 0; // Stream für aufgenomme Daten kreieren chan := BASS_StreamCreateFile(True, WaveStream.Memory, 0, WaveStream.Size, 0); if chan <> 0 then begin ProgressBar.Max := WaveStream.Size; BASS_ChannelSetPosition(chan, ProgressBar.Max, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); end else begin MessageDlg('Fehler beim Erstellen eines Streams aus der Aufnahme!', mtError, [mbOk], 0); end; // if end; // procedure StopRecording (* RecordButtonClick || Start Aufnahme *) procedure TRecordForm.RecExecute(Sender: TObject); begin if BASS_ChannelIsActive(rchan) = BASS_Active_Stopped then // Aufnahme starten begin if BASS_ChannelIsActive(chan) <> BASS_Active_Stopped then begin BASS_ChannelStop(chan); ProgressBar.Position := ProgressBar.Max; StartRecording; end else begin ProgressBar.Position := ProgressBar.Max; StartRecording; end; // if ToggleStatus(8); end else if BASS_ChannelIsActive(rchan) = BASS_Active_Playing then // Aufnahme beenden begin StopRecording; ToggleStatus(3); end; end; //procedure RecExecute (* StopButtonClick || Stop Aufnahme *) procedure TRecordForm.StopExecute(Sender: TObject); begin case BASS_ChannelIsActive(chan) of BASS_Active_Stopped: begin BASS_ChannelSetPosition(chan, 0, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); ToggleStatus(3); end; // case BASS_Active_Stopped BASS_Active_Playing: begin BASS_ChannelStop(chan); BASS_ChannelSetPosition(chan, 0, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); ToggleStatus(3); end; // case BASS_Active_Playing BASS_Active_Paused: begin BASS_ChannelStop(chan); BASS_ChannelSetPosition(chan, 0, BASS_POS_BYTE); ProgressBar.Position := BASS_ChannelGetPosition(chan, BASS_POS_BYTE); ToggleStatus(3); end; // case BASS_Active_Paused end; //case end; // procedure StopExecute procedure SyncProc(Handle: HSync; Channel, Data: DWORD; User: DWORD); stdcall; begin PostMessage(RecordForm.Handle, um_MusicEnd, 0, 0); end; (* PlayButtonClick || Wiedergabe der Aufnahme *) procedure TRecordForm.PlayExecute(Sender: TObject); begin case BASS_ChannelIsActive(chan) of BASS_Active_Stopped: begin BASS_ChannelPlay(chan, True); EndSync := Bass_ChannelSetSync(chan, Bass_SYNC_END, 0, @SyncProc, nil); ToggleStatus(1); end; BASS_Active_Playing: begin BASS_ChannelPause(chan); ToggleStatus(2); end; BASS_Active_Paused: begin BASS_ChannelPlay(chan, False); ToggleStatus(1); end; end; // case end; // procedure PlayExecute procedure TRecordForm.MusicEnd(var Msg: TMessage); begin // hier wird reingesprungen wenn der Stream endet // der mit .. MessageDlg('Dies ist ein Test.'); // vorher in deiner Play Function initialisiert wurde (**** nicht hier ****) // hier sollte dann dein Code stehen was du tun willst wenn der stream beendet ist. end; end. |
Zitat |
Registriert seit: 19. Apr 2006 Ort: Ilmenau 87 Beiträge RAD-Studio 2009 Pro |
#20
Hehe Emil,
du bist der Beste Ich danke dir vielmals. Es funktioniert fabelhaft. Jetzt muss ich nur noch hinbekommen ein bisschen zu schneiden und dann sind die groben Funktionalitäten vorhanden. Viele Grüße, Franz
Franz
|
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |