問題タブ [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.
c++ - オーディオのテンポ(速さ)を変える
ほぼリアルタイムでステレオ オーディオ ストリームのテンポを変更したい - オーディオはファイルからロードされ、バッファは 1 秒より長くすべきではない。SoundTouch ( http://www.surina.net/soundtouch/ ) を試してみましたが、テンポを下げたときの品質が非常に悪いです。現在、オーディオ信号をタイムストレッチする代替手段を探しています。Audacity に実装されている非常に良い結果をもたらす方法の 1 つは、「サブバンド正弦波モデリング」に基づいていますが、非常に低速です。
次に、Rubber Band Audio プロセッサ ライブラリ ( http://breakfastquay.com/rubberband ) と Dirac ( http://www.dspdimension.com/technology-licensing/dirac/ ) があります。これらは両方とも商用/GPL であり、完全には GPL ではありません。クロスプラットフォーム対応。
次の基準に一致するアルゴリズムやライブラリをお勧めできますか?:
- クロスプラットフォーム対応 (iOS、Android、Windows、Linux、MacOS など)
- 上記のようにリアルタイム処理に適しています
- SoundTouch ライブラリで使用されているタイム ストレッチ方式よりも優れた品質
- ピッチに影響を与えずにテンポを変更
android - Androidでサウンドタッチライブラリを使用する方法
私はSoundTouchライブラリ、つまりSoundTouchを調べて、ここで言及したようにビルドしました。しかし、私はこのコンパイルされたライブラリを私のAndroidプロジェクトで使用する方法を理解していません.だから、Androidでこのライブラリを使用する方法のアイデアや例を持っている人.私はたくさん検索しましたが、何も見つかりませんでした.
前もって感謝します
ios - iOS SoundTouch フレームワーク BPM 検出の例
ウェブ全体を検索しましたが、 SoundTouch ライブラリをビート検出 に使用する方法に関するチュートリアルが見つかりません。
(注: これまで C++ の経験はありません。C、Objective-C、および Java は知っています。したがって、これを台無しにすることもできましたが、コンパイルは可能です。)
フレームワークをプロジェクトに追加し、次のものをコンパイルすることができました。
曲のinputSamples(*samples, numSamples)
バイト情報は私を混乱させます。
これらの情報を曲ファイルから取得するにはどうすればよいですか?
使ってみmemcpy()
ましたが、うまくいかないようです。
誰にも考えはありますか?
java - SoundTouch と JNI
Javaからこのネイティブメソッドを呼び出したい:
void SoundTouch::putSamples(const SAMPLETYPE *samples, uint nSamples)
私のJavaコードには次のものがあります:
public native void putSamples(byte[] samples, int nSamples);
このメソッドと関数を橋渡しする JNI 部分を書きたいのですが、ネイティブ関数は 型の引数を期待していますが、からにSAMPLETYPE
「変換」する方法がわかりません。jbyteArray
SAMPLETYPE
Eclipse 検索を使用している場合、私が見つけた関連性のある唯一のコードは、次の STTypes.cpp にありました。typedef float SAMPLETYPE;
byte[] を float[] に変換する必要があるということですか?
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: エラー: ';' の前に ')' が必要です token make: * [obj/local/armeabi/objs/soundtouch/wrapper_wrap.o] エラー 1
この問題は、次の wrapper_wrap.cpp のブロックで発生します。
NDK を適切にコンパイルして SO ファイルを生成するために、SAMPLETYPE にどのような変更を加える必要があるかを教えてください。
java - jni SAMPLETYPE から jbyteArray へ
戻り行でエラーが発生します。私のコード:
エラー:
0xdeadd00d (コード = 1)、スレッド 5980 (スレッド 753) での致命的なシグナル 11 (SIGSEGV)
ありがとう
java - SoundTouch クラスの実装と使用 (Java Android)
MP3ファイルのテンポを変更するために、AndroidアプリでSoundTouchライブラリを使用しようとしています。
ここで説明されている手順に従って、ライブラリをコンパイルすることができました: http://www.surina.net/soundtouch/README-SoundTouch-Android.html
私の質問は、コンパイルされたライブラリを Eclipse の Android プロジェクトにインポートして使用する方法です。
上記のリンクの手順に従って、.so ファイルをプロジェクトの libs フォルダーに追加しました。この新しいライブラリを含めるようにビルド パスも変更しました。
ライブラリは「参照ライブラリ」の下に表示されるようになったので、正しい軌道に乗っていると思いますか?
私のJavaファイルでは、次のようにライブラリをインポートしようとしました:
プログラムは正常にビルドおよび実行されますが、soundTouch のメソッドを参照できないため、ライブラリが実際にロードされているとは思えません。
どんな助けでも大歓迎です!
c++ - 再生用に SoundTouch オーディオ ライブラリから short[] を変換する
Android アプリでオーディオの速度とピッチを変更するために、SoundTouch C++ ライブラリを使用しようとしています。Java byte[] 配列 (.wav から) を JNI 経由で正常にプッシュし、それを返し、AudioTrack
.
次のステップでは、SoundTouch パイプラインを介してサンプル byte[] をプッシュしようとしています。ライブラリに含まれている SoundStretch コンソール プログラムのソースを分析し、それを適応させようとしました。テスト目的で、ステレオの 16 ビット ソースを使用しています。
現在の一時的なセットアップでは、RIFF ヘッダーを無視して .wav データと共に変換しています。これは、JavaAudioTrack
オブジェクトがヘッダーを読み取る必要がなく、生の PCM を再生するだけだからです。SoundTouch 経由で送信せずに未加工の byte[] を再生すると、ヘッダーがある場所で小さなクリックが発生するだけです。
SoundTouch パイプラインを介して送信した後、音声の開始位置でホワイト ノイズを再生しています。関数の最後で問題が発生していると思いwrite()
ます。ここで、short を signed char にキャストしています。ここでは、コンソール アプリがベクトルにプッシュするのではなく、ファイルに書き込んでいます。
のドキュメントを読みましたfwrite
が、ファイルに書き込むのではなく、この情報を char[] で正しく取得するためにここで何をすべきかを知るために、ビットのいじりやオーディオ処理について十分に知りません。キャストに関する情報が失われていることはわかっていますが、それを修正する方法がわかりません。
やる気のある人のために、SoundStretch のソースはhttp://www.surina.net/soundtouch/sourcecode.htmlにあります。
処理する():
書きます():