问题标签 [soundtouch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6842 浏览

c++ - 改变音频的速度(速度)

我想近乎实时地更改立体声音频流的速度 - 音频是从文件加载的,缓冲区不应超过 1 秒。我尝试了 SoundTouch(http://www.surina.net/soundtouch/),但降低速度时的质量非常差。现在我正在寻找时间拉伸音频信号的替代方法。Audacity 中实现的一种产生非常好的结果的方法是基于“子带正弦建模”,但它非常慢。

然后是橡皮筋音频处理器库 ( http://breakfastquay.com/rubberband ) 和 Dirac ( http://www.dspdimension.com/technology-licensing/dirac/ ),它们都是商业/GPL 且不完全跨平台兼容。

你能推荐我符合以下标准的算法和/或库吗?:

  • 跨平台兼容(例如 iOS、Android、Windows、Linux、MacOS)
  • 适用于上述实时处理
  • 比 SoundTouch 库中使用的时间拉伸方法质量更好
  • 在不影响音高的情况下改变速度
0 投票
0 回答
751 浏览

android - 为 Android 移植 SoundTouch

我一直在尝试为 Android 编写一个应用程序,它可以让我实时放慢和加速音乐。我遇到了 SoundTouch 库,它甚至声明它可以通过 jni 在 Android 中使用。但是,源代码仅将 getversionString() 方法转换为 andorid。我找到了这个库的其他几个实现,例如https://github.com/nonameentername/soundtouch-android,但它缺少关键文件,因此无法编译。我还尝试移植一个名为 Mypodconv 的桌面应用程序(http://www.aplu.ch/home/apluhomex.jsp?site=44), 到 Android,但这使用了包含在 rt.jar 中的 javax.sound 包,这对于 android 来说太大了,因此会导致堆溢出并导致 Eclipse 崩溃。有人知道我怎样才能让这个库在 android 中工作吗?谢谢

0 投票
0 回答
1395 浏览

android - 如何在android中使用soundtouch库

我已经浏览了 SoundTouch 库,即SoundTouch并按照此处提及的方式构建它。但我不知道如何在我的android项目中使用这个编译的库。所以,任何人对如何在android中使用这个库有任何想法或例子。我搜索了很多但没有找到任何东西。

提前致谢

0 投票
3 回答
7679 浏览

ios - iOS SoundTouch 框架 BPM 检测示例

我在网上搜索过,找不到关于如何使用SoundTouch 库进行节拍检测的教程。

(注意:在此之前我没有 C++ 经验。我知道 C、Objective-C 和 Java。所以我可能会搞砸一些,但它可以编译。)

我将框架添加到我的项目中并设法编译以下内容:

歌曲inputSamples(*samples, numSamples)字节信息让我感到困惑。

如何从歌曲文件中获取这些信息?

我尝试使用memcpy(),但它似乎没有工作。

有人有什么想法吗?

0 投票
1 回答
218 浏览

c# - SoundTouch 和 QuickSeek 设置

当我在 Audacity(声音应用程序)中改变速度时 - 它会非常快地修改 test.wav(1 秒)。现在,当我在我的应用程序中处理相同的文件时,需要 27 秒。我通过互操作调用 soundtouch.dll 函数。当我应用 QuickSeek 时,处理 smaple 文件需要相同的时间。没有不同。有人有同样的问题吗?我使用从原始网站下载的 soundtouch.dll 和浮动样本类型。

0 投票
1 回答
385 浏览

java - SoundTouch 和 JNI

我想从java调用这个本地方法:
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)

在我的 Java 代码中,我有这个:
public native void putSamples(byte[] samples, int nSamples);

现在我想编写 JNI 部分来桥接这个方法和函数,但是本机函数需要一个 type 的参数SAMPLETYPE,但我不知道如何从 to '转换jbyteArray' SAMPLETYPE

如果使用 eclipse 搜索,我发现的唯一看似相关的代码是在 STTypes.cpp 中,即:typedef float SAMPLETYPE;

这是否意味着我必须将我的 byte[] 转换为 float[],如果是这样,如何?

0 投票
1 回答
426 浏览

android - Soundtouch 库编译问题

我正在尝试使用 Android NDK 编译 Soundtouch 库。我成功安装了 Soundtouch 库所需的 Cygwin 和 SWIG。当我尝试运行 ndk-build.cmd 时,出现错误

jni/soundtouch/wrapper_wrap.cpp:在函数'void Java_com_talkingyeti_jni2_wrapperJNI_SoundTouch_1putSamples(JNIEnv*,_jclass*,jlong​​,_jobject*,jlong​​,jlong​​)'中:jni/soundtouch/wrapper_wrap.cpp:545:错误:'SAMPLETYPE'未在此范围 jni/soundtouch/wrapper_wrap.cpp:545: 错误: 'arg2' 未在此范围内声明 jni/soundtouch/wrapper_wrap.cpp:553: 错误: ')' 标记 jni/soundtouch/wrapper_wrap 之前的预期主表达式。 cpp:560: 错误: 'const'之前的预期')' jni/soundtouch/wrapper_wrap.cpp:560: 错误: ';'之前的预期')' 令牌制作:* [obj/local/armeabi/objs/soundtouch/wrapper_wrap.o] 错误 1

此问题发生在以下 wrapper_wrap.cpp 块中:

请建议我需要对 SAMPLETYPE 进行哪些更改才能正确编译 NDK 并生成 SO 文件。

0 投票
1 回答
746 浏览

java - jni SAMPLETYPE 到 jbyteArray

我在退货线路上遇到错误。我的代码:

错误:

致命信号 11 (SIGSEGV) 位于 0xdeadd00d (code=1),线程 5980 (Thread-753)

谢谢

0 投票
1 回答
773 浏览

java - 实现和使用 SoundTouch 类(Java Android)

我一直在尝试在我的 android 应用程序中使用 SoundTouch 库来更改 mp3 文件的速度。

我已经设法按照此处概述的步骤编译了库:http: //www.surina.net/soundtouch/README-SoundTouch-Android.html

我现在的问题是如何在 Eclipse 的 android 项目中导入和使用编译的库?

按照上面链接中的步骤,我最终得到了 .so 文件,这些文件已添加到项目的 libs 文件夹中。我还更改了构建路径以包含这个新库。

该库现在显示在“引用库”下,所以我猜我在正确的轨道上?

在我的 java 文件中,我尝试像这样导入库:

该程序构建并运行良好,但我不认为该库实际上正在加载,因为我无法引用任何 soundTouch 的方法。

任何帮助将非常感激!

0 投票
1 回答
1289 浏览

c++ - 从 SoundTouch 音频库转换一个 short[] 以进行播放

我正在尝试将 SoundTouch C++ 库用于 Android 应用程序中的音频速度和音高变化。我已经成功地通过 JNI 推送了一个 Java byte[] 数组(来自 .wav),返回它,并用 .wav 播放它AudioTrack

下一步是尝试通过 SoundTouch 管道推送样本 byte[]。我已经剖析了库中包含的 SoundStretch 控制台程序的源代码,并尝试对其进行调整。我正在使用立体声 16 位源进行测试。

使用我当前的临时设置,我忽略了 RIFF 标头并将其与 .wav 数据一起转换,因为 JavaAudioTrack对象不需要读取标头,它只播放原始 PCM。在不通过 SoundTouch 发送的情况下播放原始字节 [] 只会导致在标题所在的位置单击一下。

通过 SoundTouch 管道发送后,我正在播放应该是音频开头的白噪声。我假设我在write()函数结束时遇到了问题,我将short's 转换为签名字符。在这里,控制台应用程序正在写入文件,而不是推送到向量:

我已经阅读了文档,fwrite但我对位旋转或音频处理知之甚少,无法知道如何在 char[] 中正确获取此信息,而不是写入文件。我知道我正在丢失演员表的信息,但我不确定如何纠正它。

如果有人有额外的动力,可以在这里找到 SoundStretch 源:http: //www.surina.net/soundtouch/sourcecode.html

过程():

写():