gpt4 book ai didi

ios - 如何设置 AudioStreamBasicDescription 属性?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:09 26 4
gpt4 key购买 nike

我正在尝试使用 AudioQueue 从服务器播放 PCM 流数据。

PCM 数据格式:

Sample rate = 48000, num of channel = 2, Bit per sample = 16

并且,服务器不会将固定字节流式传输到客户端。 (可变字节。)(例如:30848、128、2764,...字节)

如何设置ASBD?我不知道如何设置 mFramesPerPacket, mBytesPerFrame, mBytesPerPacket 。看过苹果的引用文档,但是没有详细的说明。

请给我任何想法。

新添加: 在这里,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)

请给我任何想法。

最佳答案

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;

关于ios - 如何设置 AudioStreamBasicDescription 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40239745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com