[iphone-cocos2d]分享一段Objective-C可调用的游戏中播放音乐(1)

首先需要引入AudioTool 这个framework

 

ExpandedBlockStart.gif代码
- (id)initWithPath:(NSString *)path
{
    UInt32        size, maxPacketSize;
    
char        *cookie;
    
int            i;
    
    
if (gThereIsAnActiveTrack)
    {
        NSLog(
@"*** WARNING *** GBMusicTrack only plays one track at a time! You must close the previously running track"
              
" before you can play another. Requested track was: %@", [path lastPathComponent]);
        
return nil;
    }
    //路径不存在的话返回空
    
if (path == nil) return nil;
   // 初始化  
    
if(!(self = [super init])) return nil;
    
    
// 通过指定的路径打开音乐
    if (noErr != AudioFileOpenURL((CFURLRef)[NSURL fileURLWithPath:path], 0x010&audioFile))
    {
        NSLog(
@"*** Error *** GBMusicTrack - initWithPath: could not open audio file. Path given was: %@", path);
        
return nil;
    }
    
    
// 得到文件的数据类型
    size = sizeof(dataFormat);
    AudioFileGetProperty(audioFile, kAudioFilePropertyDataFormat, 
&size, &dataFormat);
    
    
// 创建一个新的队列,使用的是指定的特殊数据类型和回调缓存。
    
    AudioQueueNewOutput(&dataFormat, BufferCallback, self, nil, nil, 0&queue);
    
    
// 如果需要的话读取包的大小并且分配所需要的空间
    if (dataFormat.mBytesPerPacket == 0 || dataFormat.mFramesPerPacket == 0)
    {
        
// since we didn't get sizes to work with, then this must be VBR data (Variable BitRate), so
        
// we'll have to ask Core Audio to give us a conservative estimate of the largest packet we are
        
// likely to read with kAudioFilePropertyPacketSizeUpperBound
        size = sizeof(maxPacketSize);
        AudioFileGetProperty(audioFile, kAudioFilePropertyPacketSizeUpperBound, 
&size, &maxPacketSize);
        
if (maxPacketSize > gBufferSizeBytes)
        {

            maxPacketSize = gBufferSizeBytes;
            NSLog(
@"*** Warning *** GBMusicTrack - initWithPath: had to limit packet size requested for file: %@", [path lastPathComponent]);
        }
        numPacketsToRead 
= gBufferSizeBytes / maxPacketSize;
        
        
//给包的描述分配空间
        packetDescs = malloc(sizeof(AudioStreamPacketDescription) * numPacketsToRead);
    }
    
else
    {
        
// 对于CBR 数据 (Constant BitRate), 使用合适的数据填充到混村中
        numPacketsToRead = gBufferSizeBytes / dataFormat.mBytesPerPacket;
        
        
// 这种包的描述不需要
        packetDescs = nil;
    }
    
    
// see if file uses a magic cookie (a magic cookie is meta data which some formats use)
    AudioFileGetPropertyInfo(audioFile, kAudioFilePropertyMagicCookieData, &size, nil);
    
if (size > 0)
    {
        
// 把缓存数据从文件中copy出来放到音频队列中
        cookie = malloc(sizeof(char* size);
        AudioFileGetProperty(audioFile, kAudioFilePropertyMagicCookieData, 
&size, cookie);
        AudioQueueSetProperty(queue, kAudioQueueProperty_MagicCookie, cookie, size);
        free(cookie);
    }

    AudioQueueAddPropertyListener(queue, kAudioQueueProperty_IsRunning, propertyListenerCallback, self);
    
    
// 给特定的缓存分配数据
    packetIndex = 0;
    
for (i = 0; i < NUM_QUEUE_BUFFERS; i++)
    {
        AudioQueueAllocateBuffer(queue, gBufferSizeBytes, 
&buffers[i]);
        
if ([self readPacketsIntoBuffer:buffers[i]] == 0)
        {
            
// 检查读取到缓存中的包的大小
            break;
        }
    }
    repeat 
= NO;
    trackClosed 
= NO;
    trackEnded 
= NO;
    gThereIsAnActiveTrack 
= YES;
    
return self;
}

 

 

 

//  Created by Jake Peterson (AnotherJake) on 7/6/08.
//  Copyright 2008 Jake Peterson. All rights reserved.

 

 

防盗加个链接:

   作者:Alexliu(alex dotNet Learning)
   出处:http://alexliu.cnblogs.com/

 

转载于:https://www.cnblogs.com/AlexLiu/archive/2010/02/23/1671941.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言-010(循环移位ROL,ROR 、进位循环进位RCL,RCR 、有符号数溢出 、双精度移位SHLD,SHRD、SHL和ADD计算 、位运算应用)

1 &#xff1a;循环移位ROL,ROR,带进位循环进位RCL,RCR .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.code main PROC;循环左移mov al,40h ;AL 010000000brol al,1 ;AL 100000000b ,CF 0rol al,1 ;AL 000000001b ,CF 1rol al,1 ;A…

[Z]POJ 计算几何入门题目推荐[转PKKJ]

http://www.cnblogs.com/eric-blog/archive/2011/05/31/2064785.html http://hi.baidu.com/novosbirsk/blog/item/723a9727a9ab8804918f9dca.html其实也谈不上推荐&#xff0c;只是自己做过的题目而已&#xff0c;甚至有的题目尚未AC&#xff0c;让在挣扎中。之所以推荐计算几何…

2013年 833c语言程序 江南大学 (A卷)

1.编写程序实现求两个整数最大公约数和最小公倍数. 方法一&#xff1a;辗转相除法 算法思路&#xff1a;两个整数a,b,其中a>b&#xff0c;求其最大公约数和最小公倍数 步骤① a%bc,其中c为余数 步骤② 若余数c为0&#xff0c;即a可以把b给整除,也就是说这里的b就是其最大公…

二十几岁失败的原因

1.缺乏人生目标。在研究过的人们中&#xff0c;9.98%的人没有"人生目标"&#xff0c;这恐怕是人们失败的最大原因。  2.自学能力不足。历史上所谓掌握最高教育的人&#xff0c;几乎都是"自学型"的。所谓"有教育"的人&#xff0c;不能只看成是有…

C程序生成一定范围内的随机数

Random numbers just numbers that lie within a range and any of the numbers can occur. 随机数只是在一个范围内的数字&#xff0c;任何数字都可能出现。 In programming, we come through a lot of scenarios where we need to generate random numbers. Like for dice g…

提示丢失libgcc_s_dw2-1.dll问题

QT使用MinGW编译器编译中的的执行文件&#xff0c;执行问题 将qt中安装的mingw编码器的路径添加到环境变量path (D:\Qt\Qt5.10.1\5.10.1\mingw53_32\bin)

第1章 数据库系统概述

第1章 数据库系统概述 1.1 数据库系统简介 数据库技术的发展历史 人工管理阶段文件系统阶段数据库系统阶段

浅谈多线程和异步

最近很忙&#xff0c;因此拿出时间来写博客也算是忙里偷闲了&#xff0c;继承前面的一贯风格&#xff0c;继续浅谈胡侃。  最近在项目中遇到了Socket异步网络传输的问题&#xff0c;所以沉下心来整理下。于是&#xff0c;先问了下度娘&#xff0c;结果找到了园友志良的一篇文…

查看Sql Server的log文件大小

SELECT DB_NAME(database_id) AS DatabaseName,Name AS Logical_Name,Physical_Name, (size*8)/1024 SizeMBFROM sys.master_filesWHERE DB_NAME(database_id) AdventureWorksGO 转载于:https://www.cnblogs.com/top5/archive/2010/03/02/1676776.html

python调用带参函数_Python | 带有示例的函数调用类型

python调用带参函数There are following types of function calls in python: python中有以下类型的函数调用&#xff1a; Call by value 按价值致电 Call by reference 通过参考电话 1)按价值致电 (1) Call by value ) When, we call a function with the values i.e. pass …

ffmpeg 命令添加文字水印

使用ffplay 预览一下效果&#xff1a; ffplay -i cctvhttp.flv -vf “drawtextfontsize100:fontfileArial.ttf:tex t‘hello world’:x20:y20:fontcolorblue:alpha0.5” -x 640 -y 480 使用ffmpeg保存为文件 &#xff1a; ffmpeg -i cctvhttp.flv -vf “drawtextfontsize10…

jquery弹出层

这是一个弹出层的插件&#xff0c;有时候做东西的&#xff0c;经常会用到了&#xff0c;所以在次发一下&#xff0c;和大家分享一下&#xff01; [task]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/x…

MUL与IMUL区别(微机原理与接口技术 第2版)课后习题3.14、P123

MUL与IMUL的详细区别 乘数位数隐含的被乘数乘积的存放位置举例8位ALAX中MUL BL16位AXDX与AX中&#xff08;DX存放高16位、AX存放低16位&#xff09;MUL BX 课本P97例题 一&#xff09;、将以下指令中的立即数看作是无符号数实现相乘: MOV AL,0B4H ;ALB4H180 解释以下&…

SDL_main导致main找不到入口

SDL main的错误 引用SDL.h就会报这个错误 因为SDL 将main 宏定义为 SDL_main,所以会找不到main入口 可以使用#undef main取消这个宏定义

Java MathContext类| hashCode()方法与示例

MathContext类的hashCode()方法 (MathContext Class hashCode() method) hashCode() method is available in java.math package. hashCode()方法在java.math包中可用。 hashCode() method is used to get the hash code value of this MathContext. hashCode()方法用于获取此M…

实验8 SQL Server 的存储过程

实验8 SQL Server 的存储过程一、实验目的 1.掌握使用T-SQL编程的方法 2.掌握使用T-SQL语句创建一个存储过程并验证 3.掌握创建和执行带参数的存储过程 4.熟练使用系统存储过程、系统函数 二、实验要求 1.创建一个不带参数的存储过程。 2.创建一个带参数的存储过程p_count。 三…

Oracle ——如何确定性能差的 SQL

http://www.toadworld.com/KNOWLEDGE/KnowledgeXpertforOracle/tabid/648/TopicID/TSQ7/Default.aspx 本文主要说明在应用程序内书写和调优 SQL 语句。假设&#xff0c;你已经知道你应用程序中的哪些 SQL 语句需要注意。事实上&#xff0c;这不太容易。那么&#xff0c;我们如何…

C#中的委托和事件(续)

http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html 欢迎浏览本文的后续文章&#xff1a; C#中的委托和事件(续)PDF 浏览&#xff1a;http://www.tracefact.net/Document/Delegates-and-Events-in-CSharp.pdf文中代码在VS2005下通过&#xff0c;由于VS2003(.Ne…

Java LocalDate类| minusYears()方法与示例

LocalDate类minusYears()方法 (LocalDate Class minusYears() method) minusYears() method is available in java.time package. minusYears()方法在java.time包中可用。 minusYears() method is used to subtract the given years from this LocalDate and return the LocalD…

ffmpeg 命令添加图片水印

使用ffplay预览一下&#xff1a; ffplay -i cctvhttp.flv -vf “moviewatermark.png[watermark];[in][watermark]overlay x10:y10[out]” -x 640 -y 480 参数&#xff1a; 有两个过滤器movie\overlay movie&#xff1a;读取watermark.png输出 [watermark]可以理解自定义的的变…