2016-10-25 5 views
0

AudioQueueを使用してサーバーからPCMストリームデータを再生しようとしています。AudioStreamBasicDescriptionプロパティを設定するには?

PCMデータ形式:

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

そして、サーバーがクライアントに固定されたバイトをストリーミングしていません。 (可変バイト) (例:30848,128,2764、...バイト)

ASBDの設定方法は? 設定方法がわかりませんmFramesPerPacketmBytesPerFramemBytesPerPacketです。 アップルの参考資料を読んだことがありますが、詳しい説明はありません。

私に教えてください。

新規追加:ここで、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; 
+0

は、あなたの答えをいただき、ありがとうございます。しかし、私はすでに上記のようなASBD構造を設定しています。 AudioQueueは、ストリームされたPCMデータを数秒間再生しますが、すぐに再生は停止します。私に何ができる? – user6081283

+0

オーディオオブジェクトの割り当てが解除されていないかどうかを確認します。 – Bogdan

関連する問題