問題タブ [resampling]
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.
algorithm - バイキュービック補間とランツォシュ再サンプリングについての良い読み物はどこにありますか?
上記の2つの画像リサンプリングアルゴリズム(バイキュービックとランツォス)をC++で実装したいと思います。そこには何十もの既存の実装があることを私は知っていますが、それでも私は自分で実装したいと思っています。それらがどのように機能するかを理解したいという理由と、主流の実装にはないいくつかの機能(構成可能なマルチCPUサポートや進捗レポートなど)を提供したいという理由で、それを作りたいと思っています。
ウィキペディアを読んでみましたが、少し乾燥しすぎています。おそらく、これらのアルゴリズムのより良い説明がいくつかありますか?SOでもGoogleでも何も見つかりませんでした。
追加:これらのトピックについて、誰も私に良いリンクを教えてくれないようです。誰かが少なくともここでそれらを説明しようとすることができますか?
audio - 再サンプリングされたオーディオ データのバイキュービック (またはその他の非線形) 補間をどのように行いますか?
私は、WAV ファイルをさまざまな速度で再生するコードを書いているので、波形が遅くてピッチが低くなるか、または速くてピッチが高くなります。私は現在、次のように単純な線形補間を使用しています。
これは問題なく動作しますが、再生周波数を下げた場合 (つまり、速度を落とした場合) にのみ問題なく聞こえる傾向があります。再生時にピッチを上げると、おそらくサンプル情報が失われるため、この方法では高周波のアーティファクトが生成される傾向があります。
バイキュービック法やその他の補間法は、私のコード例のように最も近い 2 つのサンプル値以外を使用してリサンプリングすることは知っていますが、ここで線形補間法を置き換えるためにプラグインできる適切なコード サンプル (できれば C#) が見つかりません。 .
誰かが良い例を知っていますか、または単純なバイキュービック補間法を書くことができますか? 必要に応じて、これに報奨金を出します。:)
更新: 補間メソッドの C# 実装をいくつか示します (最初のものは Donnie DeBoer に、2 番目のものは nosredna に感謝します)。
これらの関数では、x1 は推定しようとしているポイントの前のサンプル値であり、x2 はポイントの後のサンプル値です。x0 は x1 の左側、x3 は x2 の右側です。t は 0 から 1 になり、推定しているポイントと x1 ポイントの間の距離です。
Hermite 法はかなりうまく機能しているようで、ノイズがいくらか減少しているように見えます。さらに重要なことは、波をスピードアップすると、音が良くなるように見えることです。
algorithm - ライブ データ キャプチャのパーセンタイル
ライブ データ キャプチャのパーセンタイルを決定するアルゴリズムを探しています。
たとえば、サーバー アプリケーションの開発を考えてみましょう。
サーバーの応答時間は、17 ミリ秒 33 ミリ秒 52 ミリ秒 60 ミリ秒 55 ミリ秒などです。
90 パーセンタイル応答時間、80 パーセンタイル応答時間などをレポートすると便利です。
単純なアルゴリズムは、各応答時間をリストに挿入することです。統計が要求されたら、リストをソートし、適切な位置で値を取得します。
メモリ使用量は、リクエスト数に比例して増加します。
限られたメモリ使用量で「おおよその」パーセンタイル統計を生成するアルゴリズムはありますか? たとえば、何百万ものリクエストを処理する方法でこの問題を解決したいとしますが、パーセンタイルの追跡には 1 キロバイトのメモリしか使用したくないとします (パーセンタイルが想定されているため、古いリクエストの追跡を破棄することはオプションではありませんすべてのリクエストに適用されます)。
また、分布のアプリオリな知識がないことも必要です。たとえば、事前にバケットの範囲を指定したくありません。
bash - バージョンを知らずにsoxが自動ディザリングを実行しないようにするにはどうすればよいですか?
音声検出システムに導入する前にsoxを使用してオーディオをリサンプリングしていますが、バージョン14.3のsoxで問題が発生し、デフォルトでリサンプリング操作に自動ディザリングが追加されています。これは望ましくありません。
-D
新しいフラグを使用して無効にすることができるため、常にsox≥14.3を使用していることがわかっていれば、これは問題にはなりません。
ただし、sox≥14.3を使用することを保証することはできないため、必要に応じて-Dフラグを指定する方法が必要ですが、それ以外の場合は省略します(認識されない場合はエラーになるため)。
何か案は?
resize - Lanczos を使用してサイズを変更する方法
Lanczos で使用される sinc(x) 曲線の値を簡単に計算できます。また、Lanczos のサイズ変更に関する以前の説明を読みましたが、この分野に慣れていないため、実際にそれらを適用する方法がわかりません。
lanczos でリサンプリングするには、出力と入力を互いにオーバーレイし、ポイントがピクセル位置の場所を示すことを想像してください。各出力ピクセル位置に対して、そのポイントからボックス +- 3 出力ピクセルを取得します。そのボックス内にあるすべての入力ピクセルについて、出力ピクセル座標の出力位置からの距離をパラメータとして、その位置でのランチョス関数の値を計算します。次に、計算された値をスケーリングして正規化し、合計が 1 になるようにする必要があります。その後、各入力ピクセル値を対応するスケーリング値で乗算し、結果を加算して出力ピクセルの値を取得します。
- たとえば、プログラミング用語で「入力と出力をオーバーレイする」とは実際にはどういう意味ですか?
- lanczos(x) = { abs(x) > 3 の場合は 0、x == 0 の場合は 1、それ以外の場合は sin(x*pi)/x } の式で、x は何ですか?
簡単な例として、14 個の値 (アドレス In0 ~ In13) を持つ入力画像があるとします: 20 25 30 35 40 45 50 45 40 35 30 25 20 15
これを 2 倍、つまり 28 個の値 (アドレス Out0 ~ Out27) の画像に拡大したいと考えています。
明らかに、アドレス Out13 の値はアドレス In7 の値と同様になりますが、Out13 の正しい値を計算するには、実際にどの値を乗算すればよいでしょうか? アルゴリズムの x は何ですか?
algorithm - 一連のポイントのリサンプリング
Xサンプルの3Dポイントの配列があります(ボールの軌道を想像してください)。
ここで、これらのポイントをリサンプリングして、y サンプルの位置を持つ新しい配列を作成したいと考えています。
y は x より大きくても小さくてもかまいませんが、1 より小さくすることはできません。少なくとも 1 つのサンプルが常に存在します。
元の配列を新しい配列にリサンプリングするアルゴリズムはどのようになりますか? ありがとう!
java - 8Khz から 48Khz へのサウンド フレームのリサンプル/アップサンプル (Java/Android)
Android用に開発しようとしているアプリケーションは、48Khz (PCM 16bits & mono) でフレームを記録し、ネットワークに送信します。また、8Khz でオーディオの入力ストリームがあります。そのため、8Khz のサンプル フレームを受信して再生します (私の AudioTrack オブジェクトは 8Khz に設定されています) が、それらを再生するとすべてが機能しますが、遅延が非常に大きくなります。何かが聞こえるまで約3秒かかります。
受信したフレームを 8Khz から 48Khz にアップサンプリングして再生すれば、それほど大きな再生遅延は発生しないと思います。実際、フレームを同じレートで記録して再生すると、レイテンシーは非常に低くなります。悪い点は、48Khz で送信し、8Khz で受信するという方法を余儀なくされていることです。
前に説明したように、サウンド フレーム (16 ビット PCM) を 8Khz から 48Khz にアップサンプリングしようとしています。これを行うJavaのルーチン/ライブラリ/ APIを知っている人はいますか???
目立たない信号のアップサンプリングの基本は知っていますが、独自の FIR フィルターを設計して実装し、それをオーディオ ストリームとたたみ込むのは、やりすぎだと思います。また、それは私の知識を超えています。
それで...誰かがこれで私を助けることができますか?? 私が使用できるJavaのライブラリ/ルーチンを知っている人はいますか?? 提案や代替案はありますか??
java - Java/xuggler で複数のオーディオ チャンネルをミックスダウンするにはどうすればよいですか?
6チャンネルのサラウンドをステレオにミキシングしたいですか?xuggler スロー: ERROR com.xuggle.xuggler - エラー: inputChannels > 2; サポートされていません
java - Javaでのオーディオの最速かつ最も効率的なアップサンプリングルーチン
オーディオサンプルを11025および22050から44100に変換する必要があります。私は最速で最高のサウンドの変換ルーチンを探しています。外部ルーチンやライブラリを必要とせずに、純粋なJavaで答えを出す必要があります。ソースは、左右のチャネルを表す短い値の配列であり、そのようにインターリーブされています。LRLRLRLR
ガウス変換が最適であると聞きましたが、CPUキラーです。
更新
詳細を追加するために、最高と最速を組み合わせたいと思います。答えは、ほぼリアルタイムのコミュニケーションに適した素晴らしいサウンドのオーディオを提供します。
アップデート2
私はこれのいくつかの短いコード例を探しています、あなたのオーディオの第一人者のためのezポイントでなければなりません