Autor Beitrag
Knulli
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Do 25.11.10 20:41 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 25.11.10 20: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 ;-)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Knulli Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 116
Erhaltene Danke: 2

Win2k, Win7, Win10
D5, D2005, D2006, D2007, D10.4.2
BeitragVerfasst: Mi 15.12.10 14: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... :?

ausblenden volle Höhe 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), 0, 0, CALLBACK_NULL);
  waveOutOpen(@m_WaveOut, aDevNum, PWaveFormatEx(@fmt), DWORD(@waveCallBack), Integer(Self), CALLBACK_FUNCTION);
  ...


Vielleicht weiß ja jemand mehr... :flehan:
ALF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mi 15.12.10 18: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

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!