Webstatt.org - Community seit 2006 - 2012 (2024?)

php+musik

Avatar user-271
01.12.2007 11:53

mhhh....alsooo...ich bin schon länger am überlegen...ob man Sound dateien in php irgendwie einlesen kann....mir geht es darum:
ich hab hier ne sounddatei, ob wav oder was auch immer (ist ja konvertierbar) nun will ich durch diese Datei durchgehen und die Peaks bestimmen....
ist das mit php im allgemeinn möglich? sollte ja eigenltich schon? hat einer von euch das schonmal gemacht? oder sollte ich da doch auf eine höhere sprache greifen...das müsste aber eigentlich auch mit php gehen
weiss da jemand was? ist mal jemand über was gestolpert?

gruss user-271

#!/bin/bash
traurig){ neutral:& };:
user-303
01.12.2007 12:53

ist eigendlich recht einfach:

erstmal den wav header (was es ja bestimmt gibt...) skippen um an die musik daten zu kommen. dorf müssten sich theoretisch 16bit-PCM daten befinden. also der wert von 2 bytes gibt dir den analogen pegel als digitalen wert an.
theoretisch Fettes Grinsen

user-152
02.12.2007 08:48

> und die Peaks bestimmen
Was ist jetzt damit gemeint ?

Im Prinzip lassen sich alle Dateien mit fopen() einlesen, und wenn der Aufbau der Headerinformation bekannt ist, kann man mit unpack() die relevanten Informationen auswerten.

einfaches Beispiel mit für WAV-Dateien:


function _parsewav ( $file ) {

$fp = fopen ( $file, 'rb' );
$temp = fread($fp, 40);
fclose($fp);

if ( substr($temp,0,4) == 'RIFF' ) {

// dateigröße in byte
$bytes = unpack( 'V' , substr($temp, 4, 4) );

// format
$form = unpack( 'v' , substr($temp, 20, 2) );

// anzahl kanäle /C
$ch = unpack( 'c' , substr($temp, 22, 2) );

// samplerate /R
$samp = unpack( 'V' , substr($temp, 24, 4) );
$samp = $samp[1];

// bytes pro sekunde
$bps = unpack( 'V' , substr($temp, 28, 4) );

// bytes pro sample
$bpsa = unpack( 'v' , substr($temp, 32, 2) );
switch ( $bpsa[1] ) {
case 1: $byprosamp = '8 mono'; break;
case 2: $byprosamp = '8 stereo'; break;
case 3: $byprosamp = '16 mono'; break;
case 4: $byprosamp = '16 stereo'; break;
}

// bits pro sample /B
$bips = unpack( 'v' , substr($temp, 34, 2) );

return Array( 'C' => $ch[1], 'R' => $samp, 'B' => $bips[1] , 'BYT' => $bytes[1], 'F' => $form[1] );
}
}

Avatar user-271
02.12.2007 14:25

Original von user-303
ist eigendlich recht einfach:

erstmal den wav header (was es ja bestimmt gibt...) skippen um an die musik daten zu kommen. dorf müssten sich theoretisch 16bit-PCM daten befinden. also der wert von 2 bytes gibt dir den analogen pegel als digitalen wert an.
theoretisch Fettes Grinsen

ach das meintest du damit Fettes Grinsen
->bin übrigens grad am bauen und löten frech


noja peak bedeutet Höhepunkt....mir ist das deutsche wort dafür nicht eingefallen

ahhh danke, wenn das mit wav sooo einfach geht, werd ich mich auf wavs beschränken zwinkern

#!/bin/bash
traurig){ neutral:& };: