J'écris une application iPhone dans laquelle je joue des fichiers mp3 mono en utilisant Audio Queue Services. En jouant, j'entends seulement le son sur une chaîne. J'ai cherché un exemple de comment obtenir les fichiers à jouer sur les deux canaux, sans succès. Ce que je fais est assez simple en ce moment. J'installe ma file d'attente audio comme ceci:Comment faire pour lire un fichier mono en stéréo dans l'application iPhone en utilisant les services de file d'attente audio
AudioStreamBasicDescription queueASBD;
AudioQueueRef audioQueue;
queueASBD.mSampleRate = 44100.0;
queueASBD.mFormatID = kAudioFormatLinearPCM;
queueASBD.mFormatFlags = kAudioFormatFlagsNativeEndian | AudioFormatFlagIsPacked | kAudioFormatFlagIsSignedInteger;
queueASBD.mBytesPerPacket = 4;
queueASBD.mFramesPerPacket = 1;
queueASBD.mBytesPerFrame = 4;
queueASBD.mChannelsPerFrame = 2;
queueASBD.mBitsPerChannel = 16;
queueASBD.mReserved = 0;
AudioQueueNewOutput(&queueASBD, AudioQueueCallback, NULL, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &audioQueue);
j'ouvrir le fichier mp3 comme celui-ci (contrôle d'erreur et comme enlevé par souci de concision):
ExtAudioFileRef audioFile;
ExtAudioFileOpenURL(url, &audioFile);
ExtAudioFileSetProperty(audioFile, kExtAudioFileProperty_ClientDataFormat, sizeof(queueASBD), &queueASBD);
Et de faire la queue un tampon, je quelque chose comme ceci:
AudioQueueBufferRef buffers; // previously allocated
AudioBufferList abl;
UInt32 length = (UInt32)queueASBD.mSampleRate/BUFFERS_PER_SECOND;
abl.mNumberBuffers = 1;
abl.mBuffers[0].mDataByteSize = (UInt32)(queueASBD.mSampleRate * queueASBD.mBytesPerPacket/BUFFERS_PER_SECOND);
abl.mBuffers[0].mNumberChannels = queueASBD.mChannelsPerFrame;
abl.mBuffers[0].mData = buffer->mAudioData;
ExtAudioFileRead(audioFile, &length, &abl);
UInt32 byte_length = length * (UInt32)queueASBD.mBytesPerPacket;
buffer->mAudioDataByteSize = byte_length;
AudioQueueEnqueueBuffer(audioQueue, buffer, 0, NULL);
y at-il un moyen d'obtenir le fichier à lire en stéréo sans totalement Recodification (par exemple en utilisant les API Audio Unit)? Un convertisseur audio pourrait-il aider ici? Y a-t-il un autre moyen? Merci pour toute aide.
Oui, ça l'a fait. Je me suis dit qu'il y avait quelque chose de simple qui me manquait. Merci! –