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,我已经与为 armv7
、armv7s
、arm64
、i386
和 x86_64
编译的库共享了一个 GitHub 存储库
https://github.com/enrimr/soundtouch-ios-library
如果你想自己使用SoundTouch而不使用SoundStretch,你必须在你的Xcode项目中添加SoundTouch目录(包括libSoundTouch.a和带有头文件的目录)。
对于 SWIFT 项目:
使用 SWIFT 编程,您无法导入 .h,因此您需要创建一个名为 <Your-Project-Name>-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的主要内容,如果未能解决你的问题,请参考以下文章