2

SoundCloudAPIを使用してアーティストのトラックをストリーミングするWebアプリケーションを作成しています。波形PNG画像を取得する方法は知っていますが(http://w1.sndcdn.com/fxguEjG4ax6B_m.pngたとえば)、実際には何らかの波形データが必要です(曲の中で高い場合と低い場合)。

私のウェブホスティングでは許可されていないため、LAMEなどのオーディオライブラリにアクセスできません。することは可能ですか

  1. 何らかの方法でSoundCloudAPIから直接このデータを取得します。
  2. PHPまたはJavaScriptで波形PNG画像を処理して、必要なデータを取得しますか?(そして、おそらくこの種の処理に利用できるある種のライブラリがありますか?)
4

4 に答える 4

7

Soundcloud は浮動小数点を提供し始めていますが、まだ公式ではありません。PNGを持っているときのちょっとしたトリック:

https://w1.sndcdn.com/XwA2iPEIVF8z_m.png

w1」を「wis」で、「png」を「json」で変更します。

https://wis.sndcdn.com/XwA2iPEIVF8z_m.json

そして、あなたはそれを手に入れます!

于 2015-08-14T15:17:22.063 に答える
4

波形の PNG 画像を解析して、点の配列に変換することができます。画像は上下対称で、ピークを見つけるには、アルファ値を調べて、画像の上から不透明なピクセルがいくつあるかを数えるだけです。これは、ウィジェットNext SoundCloudで波形がレンダリングされる方法です。

PHP では、ImageMagickまたはGD Graphics Libraryを使用してこれらの値を読み取ることができます。Javascript では、画像をキャンバス オブジェクトに配置し、そこから画像データを検査することで可能です。これらの詳細にはあまり触れませんが、行き詰まった場合は別の質問をすることができます。

于 2012-05-22T20:05:38.697 に答える
1

生の波形データをSoundCloud APIリクエストから直接取得する公式の方法はありませんが、SoundCloudが非公式のエンドポイント(別名: のようなものhttps://wis.sndcdn.com/XwA2iPEIVF8z_m.json)で公開するのとまったく同じデータを、このようなコードを使用してPHPで取得する方法があります。$image_fileの値を、 SoundCloud 1800 幅 x 280 高さの PNG 画像に合わせて変更するだけで、準備完了です。

$source_width = 1800;
$source_height = 140;
$image_file = 'https://w1.sndcdn.com/XwA2iPEIVF8z_m.png';
$image_processed = imagecreatefrompng($image_file);
imagealphablending($image_processed, true);
imagesavealpha($image_processed, true);

$waveform_data = array();

for ($width = 0; $width < $source_width; $width++) {

  for ($height = 0; $height < $source_height; $height++) {

    $color_index = @imagecolorat($image_processed, $width, $height);

    // Determine the colors—and alpha—of the pixels like this.
    $rgb_array = imagecolorsforindex($image_processed, $color_index);

    // Peak detection is based on matching a transparent PNG value.
    $match_color_index = array(0, 0, 0, 127);
    $diff_value = array_diff($match_color_index, array_values($rgb_array));
    if (empty($diff_value)) {
      break;
    }

  } // $height loop.

  // Value is based on the delta between the actual height versus detected height.
  $waveform_data[] = $source_height - $height;

} // $width loop.

// Dump the waveform data array to check the values.
echo '<pre>';
print_r($waveform_data);
echo '</pre>';

この方法の利点は、そのhttps://wis.sndcdn.com/URL が有用である一方で、SoundCloud がその URL からのデータの構造を変更するかどうか、いつ変更するかがわからないことです。公式の波形 PNG からデータを取得すると、SoundCloud API エンド ユーザーへの公正な警告なしにその PNG 画像を変更するだけではないため、長期的な安定性が得られます。

また、 SoundCloud PNG ファイルの高さは 280 ピクセルですが、下半分は基本的に上半分の反転/ミラーコピーであるため、$source_width1800は 140であることに注意してください。$source_heightしたがって、0 から 150 までの値を測定するだけで、必要な波形データの値が得られます。

于 2016-03-01T05:19:07.113 に答える
0

古いスレッドに出くわして申し訳ありません-似たようなものを探していて、この投稿に出くわした場合に備えて: これは、このリンクに従って可能になりました: Waveforms, Let's Talk About They .

このスレッドの直後に公開されたので、古いスレッドにぶつけて申し訳ありません。

于 2013-01-15T08:43:12.963 に答える