如何设置 AudioStreamBasicDescription 属性?

Posted

技术标签:

【中文标题】如何设置 AudioStreamBasicDescription 属性?【英文标题】:How to set AudioStreamBasicDescription properties? 【发布时间】:2016-10-25 12:16:44 【问题描述】:

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

PCM数据格式:

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

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

如何设置 ASBD ? 我不知道如何设置 mFramesPerPacket, mBytesPerFrame, mBytesPerPacket 。 我已经阅读了 Apple 参考文档,但没有详细说明。

请给我任何想法。

新增: 这里,ASBD 结构是我设置的。 (语言:斯威夫特)

// 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;

【讨论】:

感谢您的回答。但是,我已经像上面那样设置了 ASBD 结构。 AudioQueue 可以很好地播放流式 PCM 数据几秒钟,但很快播放就停止了。我能做什么? 检查音频对象是否未释放

以上是关于如何设置 AudioStreamBasicDescription 属性?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置div铺满

如何进入电脑BIOS设置?

如何设置窗口在最前面?

自己购买的域名如何设置子域名,如何设置访问多个项目,万网

outlook如何设置自动回复

如何设置默认字体功能设置?