Willkommen in der Webstatt Zum Webstatt Blog und Stories
nuit nuit am 01.12.07 12: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 nuit

netcup.de Warum gibt es hier Werbung?
Snake am 01.12.07 13: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 :D

CIX88 am 02.12.07 09: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] );
}
}

nuit nuit am 02.12.07 15:25

Quote
Original von Snake
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 :D

ach das meintest du damit :D
->bin übrigens grad am bauen und löten :P


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 ;)

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt