音频队列播放(二)

下面是我的一些总结:(这里只有播放音乐的部分)

首先.h文件中

#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>



static const int kNumberBuffers = 3;                              // 1
typedef struct AQPlayerState {
    AudioStreamBasicDescription   mDataFormat;                    // 2
    AudioQueueRef                 mQueue;                         // 3
    AudioQueueBufferRef           mBuffers[kNumberBuffers];       // 4
    AudioFileID                   mAudioFile;                     // 5
    UInt32                        bufferByteSize;                 // 6
    SInt64                        mCurrentPacket;                 // 7
    UInt32                        mNumPacketsToRead;              // 8
    AudioStreamPacketDescription  *mPacketDescs;                  // 9
    bool                          mIsRunning;                     // 10
}AQPlayerState;

这个是一个自定义的一个包含音频队列对象的结构体,里面的字段,表示的是音频队列的各个信息.

1.音频队列的缓冲区的个数

2.也是一个结构体,描述的是音频流的基本信息.

3.创建的音频队列对象

4.音频队列中得缓存区变量

5.要播放的音频文件

6.音频队列中每个缓冲区文件大小

7.从音频文件中读取的下一个包得索引

8.每次引用CallBack,读取的包得个数

9.要播放的音频流的描述也是一个结构体

10.表示音频的是否正在播放.


还要定义一个属性

{
    AQPlayerState aqData;
}


#pragma mark Audio Queue 回调方法
static void HandleOutputBuffer (
                                AQPlayerState       *aqData,                 // 1
                                AudioQueueRef        inAQ,                    // 2
                                AudioQueueBufferRef  inBuffer                 // 3
);
1.我们上面定义的包含音频队列信息类型,在这里创建一个指针,指向这个结构体.

2.调用这个方法的音频队列变量

3.从音频文件中读取到音频队列中的缓冲区,要填充到队列缓冲区.就是上面那个图的这个东西.

第三步  定义一个计算音频队列流中数据大小的方法

//计算音频队列流的大小
void DeriveBufferSize (
                       AudioStreamBasicDescription ASBDesc,                            // 1
                       UInt32                      maxPacketSize,                       // 2
                       Float64                     seconds,                             // 3
                       UInt32                      *outBufferSize,                      // 4
                       UInt32                      *outNumPacketsToRead                 // 5
);

1.音频流数据的基本格式  ,这个在我们自定义的音频队列中得字段一样

2.要播放的时,设置读取的最大包的数据大小,可以通过AudioFileGetProperty这个方法进行设置.

3.一个音频流持有的时间

4.这个音频队列缓冲区的大小

5.每次引用CallBack方法时读取音频数据包得个数.


第四步:定义一个初始化的方法和播放的方法

//播放方法定义
-(id)initWithAudio:(NSString *)path;
<pre name="code" class="objc">-(void)play;

 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值