在 iphone sdk 中混合五首歌曲

Posted

技术标签:

【中文标题】在 iphone sdk 中混合五首歌曲【英文标题】:mixing of five songs in iphone sdk 【发布时间】:2012-12-05 09:34:24 【问题描述】:

在我的应用程序中,我有五个按钮,每个按钮都有五首歌曲。在主视图中,视图中有一个星形(包含五个端点)。当用户将按钮拖到星号的末尾时,它应该播放歌曲。 Link 这同样有四个,我们想将这些歌曲混合成一个文件,就像一个铃声将它保存到一个 tmp 目录中。我为此尝试了很多,但我无法得到问题的答案。

我使用的代码是:

- (void) doAudioCallback: (NSTimer *)timer 
    NSString *resName1 = @"drum1.aif"; 
    NSString *resName2 = @"drum2.aif"; 
    NSString *resPath1 = [[NSBundle mainBundle] pathForResource:resName1 ofType:nil];
    NSString *resPath2 = [[NSBundle mainBundle] pathForResource:resName2 ofType:nil];
    NSString *tmpDir = NSTemporaryDirectory(); 
    NSString *tmpFilename = @"MixedoftwoSongs.aif"; 
    NSString *tmpPath = [tmpDir stringByAppendingPathComponent:tmpFilename]; 

    OSStatus status;
    if (status == OSSTATUS_MIX_WOULD_CLIP)  
     else 
        NSURL *url = [NSURL fileURLWithPath:tmpPath]; 

        NSData *urlData = [NSData dataWithContentsOfURL:url]; 
        NSLog(@"wrote mix file of size %d : %@", [urlData length], tmpPath); 

        AVAudioPlayer *avAudioObj = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
        self.avAudio = avAudioObj; 
        [avAudioObj prepareToPlay]; 
        [avAudioObj play]; 
    
 

【问题讨论】:

我只做了两个音乐文件,我需要将五个文件混合成一个文件作为铃声。为此你需要PCMixer头文件。 - (void) doAudioCallback: (NSTimer *)timer NSString *resName1 = @"drum1.aif"; NSString *resName2 = @"drum2.aif"; NSString *resPath1 = [[NSBundle mainBundle] pathForResource:resName1 ofType:nil]; NSString *resPath2 = [[NSBundle mainBundle] pathForResource:resName2 ofType:nil]; NSString *tmpDir = NSTemporaryDirectory(); NSString *tmpFilename = @"MixedoftwoSongs.aif"; NSString *tmpPath = [tmpDir stringByAppendingPathComponent:tmpFilename]; OSStatus 状态; if (status == OSSTATUS_MIX_WOULD_CLIP) else NSURL *url = [NSURL fileURLWithPath:tmpPath]; NSData *urlData = [NSData dataWithContentsOfURL:url]; NSLog(@"编写了大小为 %d 的混合文件:%@", [urlData length], tmpPath); AVAudioPlayer *avAudioObj = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; self.avAudio = avAudioObj; [avAudioObj prepareToPlay]; [avAudioObj 播放]; 【参考方案1】:

我认为您必须使用执行选择器来延迟您的每个音频 [self performSelector:@selector(yourmethod) withObject:nil afterDelay:0.5];

【讨论】:

可以把五首歌的混音码发到有铃声吗

以上是关于在 iphone sdk 中混合五首歌曲的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AVAssetExportSession 覆盖 iPhone/iPod 库中的歌曲?

闹钟 iphone sdk

从 iphone SDK 3.3 及更高版本中的 plist 文件创建数组:目标 c

使用 iPhone SDK 播放音频

如何降低 iphone 的 sdk Audioqueue 的声音?

使用 iPhone SDK 播放 MP3 文件 [关闭]