AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Wie waveOutWrite visualisieren ?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie waveOutWrite visualisieren ?

Ein Thema von turboPASCAL · begonnen am 30. Aug 2009 · letzter Beitrag vom 30. Aug 2009
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 10:43
Hi,

ich habe folgendes Problem. Ich möchte Daten die über waveOutWrite ausgegeben werden
visualisieren. Das Problem an der Sache ist das der Puffer für waveOutWrite sehr gross
ist und somit nicht so einfach visualisiert werden kann.

Ich möchte jeweils nur 256 Bytes visualisieren, der waveOutWrite-Puffer ist aber zB. 4096 Bytes gross.
Demzufolge wäre die Visualisierung asynchron, weil ja immer nur die ersten 256 Bytes dargestellt werden.

Wie könnte man dies realisieren ohne über den Stereomix zu gehen ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 11:26
Gibst du die Daten über WaveOut aus, oder ein anderes Programm?

Falls ersteres der Fall ist, schau dir mal den Quellcode von Audorra an. Du kannst bei WaveOut eine Callbackfunktion registrieren und mit jedem Buffer "Userdata" verknüpfen. Dort schreibst du einfach den entsprechenden Timecode des Buffers rein, den du über die Callbackfunktion zurückbekommst. Nun Streamst du die Daten nicht nur an WaveOut sondern auch an einen Visualisierungsthread, der die Timecodedaten der Daten und der aktuellen Wiedergabe hat und synchronisierst dort.

Siehe:
AuFilterGraph.TAuAnalyzeThread.Excecute
AuWaveOut32Driver.stream_callback
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 13:51
Irgend wie sehr verwirrend alles.

Wie kann ich denn ein eigene Wavestructur in der Callbackfunktion abrufen ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 15:41
Du speicherst einen Pointer auf deine Daten in dwUser.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 15:52
Könntest du mir ein Beispiel machen ? Pseudocode oder Pi * würde reichen.

Ich verstehe einfach nicht wie dwUser beine Datenstrucktur befüllen soll.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 16:37
Delphi-Quellcode:

FBlocks: array of TWaveHdr;

type
  TMyStruct = record
    [...]
  end;
  PMyStruct = ^TMyStruct;

//Schreiben
var
  struct: PMyStruct;
begin
  New(struct);
  struct^.TimeCode = 1923820;
  @FBlocks[FCurrentBlock].dwUser = struct;

  waveOutPrepareHeader(Fhwo, @FBlocks[FCurrentBlock], SizeOf(FBlocks[FCurrentBlock]));
  waveOutWrite(Fhwo, @FBlocks[FCurrentBlock], SizeOf(FBlocks[FCurrentBlock]));
end;

//Callback
//dwParam1: Pointer of Block
procedure stream_callback(hwo: HWAVEOUT; uMsg: Cardinal; dwInstance, dwParam1, dwParam2: DWORD);stdcall;
begin
  if (uMsg = WOM_DONE) then
  begin
    with TAuWaveOutStreamDriver(Pointer(dwInstance)) do
    begin
      FFreeblocks := FFreeblocks + 1;
      FSyncData := PAuSyncData(PWaveHdr(dwParam1)^.dwUser)^;
      
      Dispose(PWaveHdr(dwParam1)^.dwUser);
    end;
  end;
end;

//Öffnen
                                                                           //\/ dwInstance
waveOutOpen(@Fhwo, Cardinal(FDevId), @FFormat, Cardinal(@stream_callback), Cardinal(self),
    CALLBACK_FUNCTION)
Hoffe das Hilft ein wenig...
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 18:08
Ersteinmal, danke.

Ich werde das mal auf einen anderen Tag verlegen. Heute kommt bei mir eh nix mehr rum.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 21:13
Es hindert dich auch niemand daran direkt Audorra (bzw. das WaveOut-Modul) zu verwenden
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 23:06
Das würde die Sache vill. vereinfachen.
Allerdings ist das Programm an sich nonVCL.

Des weiteren würde ich nichts dazu lernen.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Wie waveOutWrite visualisieren ?

  Alt 30. Aug 2009, 23:34
Wenn du SysUtils und Classes nicht als VCL zählst ist Audorra auch nonVCL (ist ja auch eine Demo für ein pures Konsolenprogramm dabei) und die WaveOut-Unit kannst du ja auch getrennt nutzen.

Dein zweiter Grund ist aber natürlich ausschlaggebend.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz