2

我正在创建一个使用 SoundCloud API 流式传输艺术家曲目的 Web 应用程序。我知道如何获得波形 PNG 图像(http://w1.sndcdn.com/fxguEjG4ax6B_m.png例如),但我实际上需要某种波形数据(歌曲中什么时候高,什么时候低?)。

我无法访问像 LAME 之类的音频库或类似的东西,因为我的网络托管不允许它。是否有可能

  1. 以某种方式直接从 SoundCloud API 获取这些数据。
  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 图像以将其转换为点数组。图像是垂直对称的,要找到峰值,您只需检查 alpha 值即可计算距图像顶部有多少不透明像素。这就是为小部件Next SoundCloud呈现波形的方式。

在 PHP 中,您可以使用ImageMagickGD 图形库来读取这些值,而在 Javascript 中,可以通过将图像放在画布对象上,然后从那里检查图像数据。我不会过多介绍这些细节,但如果你遇到困难,你当然可以问另一个问题。

于 2012-05-22T20:05:38.697 回答
1

https://wis.sndcdn.com/XwA2iPEIVF8z_m.json虽然没有官方方法可以直接从 SoundCloud API 请求中获取原始波形数据,但有一种方法可以使用这样的代码在 PHP中的非官方端点(又名:类似的东西)中获取 SoundCloud 显示的完全相同的数据。只需更改值$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 是否/何时会改变来自它的数据结构。从官方波形 PNG 导出数据提供了一些长期稳定性,因为它们不仅会在没有向 SoundCloud API 最终用户发出公平警告的情况下更改该 PNG 图像。

另外,请注意,虽然$source_width是 1800$source_height是 140,因为虽然 SoundCloud PNG 文件的高度为 280 像素,但下半部分基本上只是上半部分的翻转/镜像副本。因此,只需测量 0 到 150 之间的值即可为您提供必要的波形数据值。

于 2016-03-01T05:19:07.113 回答
0

很抱歉碰到一个旧线程 - 以防万一你正在寻找类似的东西并偶然发现这篇文章:现在可以根据这个链接:波形,让我们谈谈它们

它是在这个帖子之后不久发布的——所以再次为撞到一个旧帖子而道歉。

于 2013-01-15T08:43:12.963 回答