Программу хотел сделать.ПРинцип действия:рисуешь к примеру в пейнте белым карандашом на черном фоне вертикально волну,программа открывает получившийся рисунок,сконирует по порядку
каждую строку пикселей и постепенно формирует звуковой файл,который уже будет воспроизводиться,в принципе все готово,только в спецификации wav-файлов междду 56 и 60 символом должен находиться размер данных представленный Ansi-сиволами,и между 4 и 8сиволом должен находиться полный размер файла минус восемь байт.Вот код программ:
PHP | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| <?php
#Высота 229;Ширина 1205 Цвет черный
set_time_limit(100);
$y=1;
$x=1;
$string='';
$cvet=pack("v*",0xFFFF);
$cvet2=pack("v*",0xFF);
$cvet=$cvet.SUBSTR($cvet2,0,1);
#ECHO $cvet;
// Получаем содержимое файла
$fp=fopen('muzika.bmp',"r");
$content=fread($fp,filesize('muzika.bmp'));
fclose($fp);
// Вывод содержимого файла
#print($content);
//
$gr=strrev(substr($content,18,4));
$gr=hexdec(bin2hex($gr));
//
echo 'Гориз.разм='.$gr.'|';
$vr=strrev(substr($content,22,4));
$vr=hexdec(bin2hex($vr));
echo 'Вертик.разм='.$vr.'|';
$co=substr($content,54);
while (strlen($co)>0){
if(($x-1)==$gr){
$os=4-(($gr*3)%4);
#echo $os;
$co=substr($co,$os);
$y++;
$x=1;
};
$p[$y][$x]=substr($co,0,3);
if ($p[$y][$x]==$cvet)
{
$hexzv=round($x/$gr*256);
$hexzv=dechex($hexzv);
if(strlen($hexzv)==1){$hexzv='0'.$hexzv;};
$hexzv=$hexzv;
$hey=pack("n*",$hexzv);
$hey=substr($hey,1,1);
$string=$string.$hey;
//x-это высота звука
};
$co=substr($co,3);
#echo $co;
$x++;
};
$fp=fopen("sablon.wav","r");
$content=fread($fp,filesize("sablon.wav"));
fclose($fp);
#unlink ("muzika.wav");
$f=fopen("muzika.wav","w");
$dlin=dechex(strlen($string));
if(strlen($dlin)==2){$dlin='00'.$dlin;};
if(strlen($dlin)==3){$dlin='0'.$dlin;};
if(strlen($dlin)==1){$dlin='000'.$dlin;};
#strrev
echo $dlin;
echo strlen($dlin);
$dlin=$dlin;
$dlin2=substr($dlin,2,2);
echo $dlin2;
$hey2=pack("v*",$dlin2);
echo $hey2;
$content=substr($content,0,56).$hey2.substr($content,58);
fwrite($f,$content.$string);
fclose($f);
?> |
|
Самое удивительное верхний pack работает как надо.Не приложу ума где кроется загадка.
Добавлено через 4 минуты

Сообщение от Humanoid
Если указано 'v', значит число должно быть 16-ричным. Например, можно
Дело в том что это-то работает,как и в самом первом посту передал,все глюки начинаются с передачи pack переменных
Добавлено через 4 минуты

Сообщение от romchiksoad
походу не только ты
Добавлено через 44 секунды
попробуй в переменную $w записывать без кавычек
Точно то что нужно,огромное спасибо,оказывается данные можно и без кавычек писать))))
Только вот,как мне это реализовать на коде,изначально же у меня не строка кода а переменная,единственныей выход который я вижу это eval
Добавлено через 7 минут
PHP | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
| <?php
#Высота 229;Ширина 1205 Цвет черный
set_time_limit(100);
$y=1;
$x=1;
$string='';
$cvet=pack("v*",0xFFFF);
$cvet2=pack("v*",0xFF);
$cvet=$cvet.SUBSTR($cvet2,0,1);
#ECHO $cvet;
// Получаем содержимое файла
$fp=fopen('muzika.bmp',"r");
$content=fread($fp,filesize('muzika.bmp'));
fclose($fp);
// Вывод содержимого файла
#print($content);
//
$gr=strrev(substr($content,18,4));
$gr=hexdec(bin2hex($gr));
//
echo 'Гориз.разм='.$gr.'|';
$vr=strrev(substr($content,22,4));
$vr=hexdec(bin2hex($vr));
echo 'Вертик.разм='.$vr.'|';
$co=substr($content,54);
while (strlen($co)>0){
if(($x-1)==$gr){
$os=4-(($gr*3)%4);
#echo $os;
$co=substr($co,$os);
$y++;
$x=1;
};
$p[$y][$x]=substr($co,0,3);
if ($p[$y][$x]==$cvet)
{
$hexzv=round($x/$gr*256);
$hexzv=dechex($hexzv);
if(strlen($hexzv)==1){$hexzv='0'.$hexzv;};
$hexzv=$hexzv;
$hey=pack("n*",$hexzv);
$hey=substr($hey,1,1);
$string=$string.$hey;
//x-это высота звука
};
$co=substr($co,3);
#echo $co;
$x++;
};
$fp=fopen("sablon.wav","r");
$content=fread($fp,filesize("sablon.wav"));
fclose($fp);
#unlink ("muzika.wav");
$f=fopen("muzika.wav","w");
$dlin=dechex(strlen($string));
if(strlen($dlin)==2){$dlin='00'.$dlin;};
if(strlen($dlin)==3){$dlin='0'.$dlin;};
if(strlen($dlin)==1){$dlin='000'.$dlin;};
#strrev
echo $dlin;
eval ("\$hey2=pack(\"v*\",0x$dlin);");
echo $hey2;
$content=substr($content,0,56).$hey2.substr($content,58);
fwrite($f,$content.$string);
fclose($f);
?> |
|
Всё отлично работает!)) Правда код несколько громоздкий где while,может как-то можно оптимизировать?
0
|