Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите убрать шум и background из волни wav файл 
:(
    Опции темы
Sarvarbek
Дата 26.1.2014, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 26.1.2014

Репутация: нет
Всего: нет



Я скачал исходник который нарисует гистограмму вав файла. Помогите убрать шум и задный фон. Вот исходник:


class.wav.php: 

Код


<?php

/ $File: class.wave.php $Date: 09-02-08 /

class wave {

var $fp, $filesize;
var $data, $blocktotal, $blockfmt, $blocksize;

function __construct($file) {

    if(!$this->fp = @fopen($file, 'rb')) {
        return false;
    }

    $this->filesize = filesize($file);

}

function wavechunk() {

    rewind($this->fp);

    $riff_fmt = 'a4ID/VSize/a4Type';
    $riff_cnk = @unpack($riff_fmt, fread($this->fp, 12));

    if($riff_cnk['ID'] != 'RIFF' || $riff_cnk['Type'] != 'WAVE') {
        return -1;
    }

    $format_header_fmt = 'a4ID/VSize';
    $format_header_cnk = @unpack($format_header_fmt, fread($this->fp, 8));

    if($format_header_cnk['ID'] != 'fmt ' || !in_array($format_header_cnk['Size'], array(16, 18))) {
        return -2;
    }

    $format_fmt = 'vFormatTag/vChannels/VSamplesPerSec/VAvgBytesPerSec/vBlockAlign/vBitsPerSample'.($format_header_cnk['Size'] == 18 ? '/vExtra' : '');
    $format_cnk = @unpack($format_fmt, fread($this->fp, $format_header_cnk['Size']));

    if($format_cnk['FormatTag'] != 1) {
        return -3;
    }

    if(!in_array($format_cnk['Channels'], array(1, 2))) {
        return -4;
    }

    $fact_fmt = 'a4ID/VSize/Vdata';
    $fact_cnk = @unpack($fact_fmt, fread($this->fp, 12));

    if($fact_cnk['ID'] != 'fact') {
        fseek($this->fp, ftell($this->fp) - 12);
    }

    $data_fmt = 'a4ID/VSize';
    $data_cnk = @unpack($data_fmt, fread($this->fp, 8));

    if($data_cnk['ID'] != 'data') {
        return -5;
    }

    if($data_cnk['Size'] % $format_cnk['BlockAlign'] != 0) {
        return -6;
    }

    $this->data = fread($this->fp, $data_cnk['Size']);
    $this->blockfmt = $format_cnk['Channels'] == 1 ? 'sLeft' : 'sLeft/sRight';

    $this->blocktotal = $data_cnk['Size'] / 4;
    $this->blocksize = $format_cnk['BlockAlign'];

    $return = array
        (
        'Channels' => $format_cnk['Channels'],
        'SamplesPerSec' => $format_cnk['SamplesPerSec'],
        'AvgBytesPerSec' => $format_cnk['AvgBytesPerSec'],
        'BlockAlign' => $format_cnk['BlockAlign'],
        'BitsPerSample' => $format_cnk['BitsPerSample'],
        'Extra' => $format_cnk['Extra'],
        'seconds' => ($data_cnk['Size'] / $format_cnk['AvgBytesPerSec'])
        );

    return $return;

}

function waveimage($channel = 'Left', $width = 1000, $height = 300, $bgcolor = array(255, 255, 255), $cenlinecolor = array(180, 180, 180), $imgcolor = array(0, 0, 0)) {

    if(!$this->data) {
        if(!is_array($this->wavechunk())) {
            return false;
        }
    }

    $width = max(10, $width);
    $height = max(10, $height);

    $border = 1;
    $center = ($height - $border * 2) / 2;

    $num_merge = max(1, round($this->blocktotal / $width));
    $width = min($width, ceil($this->blocktotal / $num_merge));

    $max = $min = 0;
    $x = 1;

    $pixels = array();
    $wavetotal = 0;

    for($i = 0; $i < $this->blocktotal; $i++) {
        $blocks[] = @unpack($this->blockfmt, substr($this->data, $i * 4, $this->blocksize));
    }

    if(!isset($blocks[0][$channel])) {
        return false;
    }

    for($i = 0; $i < $this->blocktotal; ) {

        for($j = 0; $j < $num_merge; $j++) {
            if(isset($blocks[$i + $j])) {
                $wavetotal += $blocks[$i + $j][$channel];
            }
        }

        $y = round($wavetotal / ($j + 1));
        $pixels[] = array($x, $y);

        $max = max($max, $y);
        $min = min($min, $y);

        $x++;
        $i += $num_merge;
        $wavetotal = 0;

    }

    $maxblock = max(abs($max), abs($min));
    $zoom = $maxblock / $center;

    $im = imagecreate($width, $height);
    $background = imagecolorallocate($im, $bgcolor[0], $bgcolor[1], $bgcolor[2]);

    if($cenlinecolor) {
        $cenline = imagecolorallocate($im, $cenlinecolor[0], $cenlinecolor[1], $cenlinecolor[2]);
        imageline($im, 1, $center, $width, $center, $cenline);
    }

    $color = imagecolorallocate($im, $imgcolor[0], $imgcolor[1], $imgcolor[2]);
    $y_old = 0;

    foreach($pixels as $pixel) {

        $y = $center - round($pixel[1] / $zoom);
        imagesetpixel($im, $pixel[0], $y, $color);

        if($pixel[0] > 1) {
            imageline($im, $pixel[0] - 1, $y_old, $pixel[0], $y, $color);
        }

        $y_old = $y;

    }

    return $im;

}
}

?>


---------------------------------------------------
example_draw.php:
Код


 <?php

if(($file = $_FILES['upload']) && $file['name'] != 'none' && $file['size'] && $file['tmp_name']) {

include 'class.wave.php';

$wave = new wave($file['tmp_name']);
$chunk = $wave->wavechunk();

if(!is_array($chunk)) {
    exit('This is not a wav file.');
}

if($chunk['seconds'] > 999) {

    echo "The wav is too long.\r\n\r\n";
    print_r($chunk);

} else {

    set_time_limit(999);

    if($im = $wave->waveimage()) {
        header('Content-Type: image/png');
        imagepng($im, 'simple.png');

        } else {
        echo "wrong!\r\n\r\n";
        print_r($chunk);
    }

}
} else {

?>

<form action="?" id="upload_form" method="post" enctype="multipart/form-data"> <input type="file" name="upload" /><br /> <button type="submit">Submit Wav file</button> </form>

<?php

}

?>


Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  1.rar 49,34 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.