Я пытаюсь использовать SUBSTRING_INDEX(string,delimiter,count)
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com'
подробнее о mysql.com http://dev.mysql.com/doc/refman/5.1/en/string-functions. HTML # function_substring индекс
Функция JavaScript на стороне клиента для загрузки блога WAV:
function upload(blob) {
var xhr=new XMLHttpRequest();
xhr.onload=function(e) {
if(this.readyState === 4) {
console.log("Server returned: ",e.target.responseText);
}
};
var fd=new FormData();
fd.append("that_random_filename.wav",blob);
xhr.open("POST","<url>",true);
xhr.send(fd);
}
PHP-файл upload_wav.php
:
<?php
// get the temporary name that PHP gave to the uploaded file
$tmp_filename=$_FILES["that_random_filename.wav"]["tmp_name"];
// rename the temporary file (because PHP deletes the file as soon as it's done with it)
rename($tmp_filename,"/tmp/uploaded_audio.wav");
?>
, после которого вы можете воспроизвести файл /tmp/uploaded_audio.wav
.
Но помните! /tmp/uploaded_audio.wav
был создан пользователем www-data
и (по умолчанию PHP) не читается пользователем. Чтобы автоматизировать добавление соответствующих разрешений, добавьте строку
chmod("/tmp/uploaded_audio.wav",0755);
в конец PHP (до конечного тега PHP ?>
).
Надеюсь, что это поможет.
Самый простой способ, если вы просто хотите взломать этот код, - зайти в recorderWorker.js и взломать функцию exportWAV () примерно так:
function exportWAV(type){
var bufferL = mergeBuffers(recBuffersL, recLength);
var bufferR = mergeBuffers(recBuffersR, recLength);
var interleaved = interleave(bufferL, bufferR);
var dataview = encodeWAV(interleaved);
var audioBlob = new Blob([dataview], { type: type });
var xhr=new XMLHttpRequest();
xhr.onload=function(e) {
if(this.readyState === 4) {
console.log("Server returned: ",e.target.responseText);
}
};
var fd=new FormData();
fd.append("that_random_filename.wav",audioBlob);
xhr.open("POST","<url>",true);
xhr.send(fd);
}
Затем этот метод сэкономит на сервер из рабочего потока, вместо того, чтобы возвращать его в основной поток. (Комплексный механизм на основе Worker в RecorderJS состоит в том, что большой код должен выполняться за нить.)
На самом деле, в идеале, вы бы просто использовали MediaRecorder сегодня и пусть он делает кодировку, но это цельный «шарик из воска».