Entwickler-Ecke
Multimedia / Grafik - 8 Kanal Audio mit waveOut...() Funktionen
Knulli - Do 25.11.10 19:41
Titel: 8 Kanal Audio mit waveOut...() Funktionen
Hi Leute,
kann mir jemand dabei helfen, auf einer 8-Kanal Soundkarte 8 verschiedene Frequenzen auszugeben?
Bis zu 2 Kanälen kriege ich es selber hin, aber wenn man versucht waveOutOpen mit was anderem als 1 oder 2 für nChannels aufzurufen, gibts ne Null als HWAVEOUT. :-(
Jemand ne Idee?
Knulli
Martok - Do 25.11.10 19:52
Soweit ich weiß, geht mehr als Stereo (jedenfalls unter XP) nur über DirectSound oder ähnliches.
Funktionieren tun mindestens 4 Kanäle mit der Bass.dll bzw fmod, das weiß ich ;-)
Knulli - Mi 15.12.10 13:20
So, bin nun etwas weiter, WAVE_FORMAT_EXTENSIBLE ist das Zauberwort... :think:
Wenn mir nun noch jemand mal das mit der Callbackfunktion verklickern könnte...
Hab soviel verstanden, daß sie von Window/Treiber aufgerufen wird, wenn der gerade abgespielte Puffer fertig ist und der nächste dran soll.
Aber dann höre ich doch ne Lücke...???
Dann hab ich mal was von zwei oder drei verwendeten Puffern gesehen, die mit pNext irgendwie verlinkt sind, aber begriffen hab ichs noch nicht... :?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| constructor TWaveOutDevice.Create(aDevNum: Integer; aChannels: Integer); var Mask: DWORD; fmt: TWaveFormatExtensible; begin FillChar(fmt, SizeOf(fmt), 0); m_Channels := aChannels;
fmt.Format.wFormatTag := WAVE_FORMAT_EXTENSIBLE; fmt.Format.nSamplesPerSec := cSamplesPerSec; fmt.Format.nChannels := m_Channels; fmt.Format.wBitsPerSample := cBitsPerSample; fmt.Format.nBlockAlign := (fmt.Format.wBitsPerSample shr 3) * fmt.Format.nChannels; fmt.Format.nAvgBytesPerSec := fmt.Format.nSamplesPerSec * fmt.Format.nBlockAlign; fmt.Format.cbSize := sizeof(TWaveFormatExtensible)-sizeof(TWaveFormatEx); fmt.Samples.wValidBitsPerSample := cBitsPerSample; Mask := 0; if m_Channels >= 1 then Mask := Mask OR SPEAKER_FRONT_LEFT; if m_Channels >= 2 then Mask := Mask OR SPEAKER_FRONT_RIGHT; if m_Channels >= 3 then Mask := Mask OR SPEAKER_FRONT_CENTER; if m_Channels >= 4 then Mask := Mask OR SPEAKER_LOW_FREQUENCY; if m_Channels >= 5 then Mask := Mask OR SPEAKER_BACK_LEFT; if m_Channels >= 6 then Mask := Mask OR SPEAKER_BACK_RIGHT; if m_Channels >= 7 then Mask := Mask OR SPEAKER_SIDE_LEFT; if m_Channels >= 8 then Mask := Mask OR SPEAKER_SIDE_RIGHT; fmt.dwChannelMask := Mask; fmt.SubFormat := KSDATAFORMAT_SUBTYPE_PCM;
waveOutOpen(@m_WaveOut, aDevNum, PWaveFormatEx(@fmt), DWORD(@waveCallBack), Integer(Self), CALLBACK_FUNCTION); ... |
Vielleicht weiß ja jemand mehr... :flehan:
ALF - Mi 15.12.10 17:41
8 Kanäle gehen auch mit Bass.Dll :wink:
Vorrausgesetzt die SounkartenSoftware ist dafür eingestellt, also auf 7.1 z.B.
Bei Dir @Knulli, mal überprüfen ob die SounkartenSoftware auch auf 7.1 eingestellt ist. Ist sie das nicht, so kommt auch nur 1+2 als Front bzw als Kopfhörer.
Frage, willst Du 8 unterschiedliche Frequenzen gleichzeitig auf den unterschiedlichen Kanälen ausgeben oder hintereinander!?
Wenn gleichzeitig müsstest Du natürlich auch 8 Puffer anlegen und die dann den Kanälen zuordnen.
Gruss ALf
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!