Как установить свойства AudioStreamBasicDescription?
Я пытаюсь воспроизвести потоковые данные PCM с сервера, используя AudioQueue.
Формат данных PCM:
Sample rate = 48000, num of channel = 2, Bit per sample = 16
И сервер не передает потоковые фиксированные байты клиенту. (переменные байты.) (например: 30848, 128, 2764, ... байтов)
Как установить ASBD? Я не знаю как настроить mFramesPerPacket
, mBytesPerFrame
, mBytesPerPacket
, Я прочитал справочный документ Apple, но там нет подробных описаний.
Пожалуйста, дайте мне любую идею.
Новое добавлено: здесь, ASBD структура, что я установил. (язык: Swift)
// Create ASBD structure & set properties.
var streamFormat = AudioStreamBasicDescription()
streamFormat.mSampleRate = 48000
streamFormat.mFormatID = kAudioFormatLinearPCM
streamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked
streamFormat.mFramesPerPacket = 1
streamFormat.mChannelsPerFrame = 2
streamFormat.mBitsPerChannel = 16
streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel / 8) * streamFormat.mChannelsPerFrame
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame
streamFormat.mReserved = 0
// Create AudioQueue for playing PCM streaming data.
var err = AudioQueueNewOutput(&streamFormat, self.queueCallbackProc, nil, nil, nil, 0, &aq)
...
Я установил структуру ASBD, как указано выше.
AudioQueue очень хорошо воспроизводит потоковые данные PCM в течение нескольких секунд,
но скоро игра остановится. Что я могу сделать?
(все еще потоковая передача и постановка в очередь AudioQueue)
Пожалуйста, дайте мне любую идею.
1 ответ
ASBD - это просто структура, определяемая следующим образом:
struct AudioStreamBasicDescription
{
Float64 mSampleRate;
AudioFormatID mFormatID;
AudioFormatFlags mFormatFlags;
UInt32 mBytesPerPacket;
UInt32 mFramesPerPacket;
UInt32 mBytesPerFrame;
UInt32 mChannelsPerFrame;
UInt32 mBitsPerChannel;
UInt32 mReserved;
};
typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
Вы можете установить переменные структуры следующим образом:
AudioStreamBasicDescription streamFormat;
streamFormat.mFormatID = kAudioFormatLinearPCM;
streamFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
streamFormat.mSampleRate = sampleRate;
streamFormat.mBitsPerChannel = bitsPerChannel;
streamFormat.mChannelsPerFrame = channelsPerFrame;
streamFormat.mFramesPerPacket = 1;
int bytes = (bitsPerChannel / 8) * channelsPerFrame;
streamFormat.mBytesPerFrame = bytes;
streamFormat.mBytesPerPacket = bytes;