iPhone 的 Soundtouch

Posted

技术标签:

【中文标题】iPhone 的 Soundtouch【英文标题】:Soundtouch for iPhone 【发布时间】:2010-02-13 15:45:44 【问题描述】:

有人能做到吗? http://www.surina.net/soundtouch/ 为 iPhone 工作?

简单的 Xcode Demo 会很有帮助。

我只想通过一些音高操作来播放音效。

谢谢 克里斯

【问题讨论】:

我不确定如何集成 SoundTouch 以在 ios 上编译,但这个问题中的人让它工作:***.com/q/3963827/207682 【参考方案1】:

使用 SoundTouch 实现音频效果的最佳方法是同时使用 SoundStretch

您可以从这里http://www.surina.net/soundtouch/sourcecode.html下载两者的源代码

SoundStretch 是执行 SoundTouch 的命令行程序 WAV 音频文件的库效果。该程序是源代码 示例如何使用 SoundTouch 库例程处理声音 在其他程序中,但它可以用作独立音频 处理工具。

SoundStretch 功能:

读写.wav音频文件 允许非常广泛的参数调整范围: 速度和播放速率可在 -95% .. +5000% 范围内调整 音高(键)可在 -60 .. +60 个半音(+- 5 个八度)范围内调整。 Beats-Per-Second (BPM) 检测可以调整节奏以匹配所需的 BPM 速率。 提供完整的源代码 命令行界面允许使用 SoundStretch 实用程序以批处理模式处理.wav 音频文件 支持通过标准输入/输出管道处理.wav 音频流 SoundStretch 使用 SoundTouch 库例程进行音频处理。

使用示例:

NSArray *effects = [NSArray arrayWithObjects:@"-rate=-22", nil];
NSURL *audio = [self base:input output:output effects:effects];

其中base:output:effects定义为:

- (NSURL *)base:(NSURL *)input output:(NSURL *)output effects:(NSArray *)effects
    int _argc = 3 + (int)[effects count];
    
    const char *_argv[]="createWavWithEffect",[[input path] UTF8String], [[output path] UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String],[@"" UTF8String];
    
    for (int i=0; i<[effects count]; i++) 
        _argv[i+3] = [effects[i] UTF8String];
    
    createWavWithEffect(_argc, _argv);

    // IMPORTANT! Check the file size, maybe you will need to set by yourself

    return output;

如果您不想自己编译 SoundTouch,我已经与为 armv7armv7sarm64i386x86_64 编译的库共享了一个 GitHub 存储库

https://github.com/enrimr/soundtouch-ios-library

如果你想自己使用SoundTouch而不使用SoundStretch,你必须在你的Xcode项目中添加SoundTouch目录(包括libSoundTouch.a和带有头文件的目录)。

对于 SWIFT 项目:

使用 SWIFT 编程,您无法导入 .h,因此您需要创建一个名为 &lt;Your-Project-Name&gt;-Bridging-Header-File.h 的 .h 文件 然后在您的项目构建设置中引用它(在“Swift Compiler”下查找“Objective C Bridging Header”):

$(SRCROOT)/<Your-Project-Name>-Bridging-Header.h

现在你必须能够使用 SoundTouch 类了。

对于 Objective-C 项目:

包括以下行

#include "SoundTouch.h" 

在您的控制器文件中。

createWavWithEffect的实现:

int createWavWithEffect(const int nParams, const char * const paramStr[])

    WavInFile *inFile;
    WavOutFile *outFile;
    RunParameters *params;
    SoundTouch soundTouch;

    fprintf(stderr, _helloText, SoundTouch::getVersionString());

    try 
    
        // Parse command line parameters
        params = new RunParameters(nParams, paramStr);

        // Open input & output files
        openFiles(&inFile, &outFile, params);

        if (params->detectBPM == TRUE)
        
            // detect sound BPM (and adjust processing parameters
            //  accordingly if necessary)
            detectBPM(inFile, params);
        

        // Setup the 'SoundTouch' object for processing the sound
        setup(&soundTouch, inFile, params);

        // clock_t cs = clock();    // for benchmarking processing duration
        // Process the sound
        process(&soundTouch, inFile, outFile);
        // clock_t ce = clock();    // for benchmarking processing duration
        // printf("duration: %lf\n", (double)(ce-cs)/CLOCKS_PER_SEC);

        // Close WAV file handles & dispose of the objects
        delete inFile;
        delete outFile;
        delete params;

        fprintf(stderr, "Done!\n");
     
    catch (const runtime_error &e) 
    
        // An exception occurred during processing, display an error message
        fprintf(stderr, "%s\n", e.what());
        return -1;
    

    return 0;

【讨论】:

如何使用“createWavWithEffect”谢谢。我正在使用 SoundTouch 1.8 能否请您添加“createWavWithEffect”的实现? @EnriMR:不能用 swift 编译。我已将桥接头和 #import "SoundTouch.h" 添加到该标头中,但在从 https://github.com/enrimr/soundtouch-ios-library 下载的 .h 文件中出现错误 @KetanParmar 我认为一些新版本的 Swift 可能需要不同的桥接实现,不幸的是,我几年前就没有使用它了。如果您有解决方案,请在此处分享。 @KetanParmar 您需要编写一个 Objective-C 包装类。为此。

以上是关于iPhone 的 Soundtouch的主要内容,如果未能解决你的问题,请参考以下文章

iphone13和12外观的区别 iphone13和iphone12对比哪个好

iPhone 5 与 iPhone 4 的图像命名

iPhone 各大机型设备号

iPhone - iPhone5 对现有应用程序的支持?

设置图像以适合 iPhone 5 和 iPhone 6

为 iPhone 和 iPhone 4 开发之间有啥变化?