Войти
ПрограммированиеФорумЗвук

ActionScript | Звук обрезается при внедрении с помощью Embed

#0
15:01, 18 мая 2013

Есть обычный короткий mp3 файл (клик). Сначала я его встраиваю тегом Embed. А потом этот же mp3 файл импортирую в библиотеку и прилинковываю к классу imported_sound. После этого я ожидаю, что и тот и другой объект sound будут играть одинаково, но встроенный через Embed звук почему-то как-то странно обрезается. Это можно починить?

[Embed(source = "sound.mp3")] var embed_sound:Class;
 
var s1:Sound = new embed_sound() as Sound;
var s2:Sound = new imported_sound() as Sound;
 
btn1.addEventListener( MouseEvent.CLICK, Play1 );
btn2.addEventListener( MouseEvent.CLICK, Play2 );
 
function Play1( e:MouseEvent ):void {
  s1.play();
}
function Play2( e:MouseEvent ):void {
  s2.play();
}

Исходник


#1
16:01, 18 мая 2013

А если так:

[Embed(source="Story.txt", mimeType="application/octet-stream")]
private var storyClass:Class;
 
var storyByteArray:ByteArrayAsset = ByteArrayAsset(new storyClass());
var story:String = storyByteArray.readUTFBytes(storyByteArray.length);
?

#2
16:54, 18 мая 2013

Sasha7b9, я правильно понял? Мне нужно звуковой файл конвертировать в текстовый файл и потом проиграть звук, как строку?

Трейс длины показывает, что первый звук короче, чем второй. Но это же один и тот же файл. Как так? О_о

trace( sound_1.length, sound_2.length );
1340.952380952381 3866.122448979592

#3
17:10, 18 мая 2013

Нет.
Поясняю. Здесь описан способ встраивания любых данных путём представления их в виде двоичного файла. На это указывает mimeType="application/octet-stream".
Вот здесь всё подробно описано: http://breeze-cosmodrome.blogspot.com/2010/02/embed-actionscript-30.html
По этому способу я и рекомендовал попробовать сделать.
Твой способ, хоть и копирует один в один пример из адобовского хелпа, но хз, хз. Тем более сам видишь - длины не совпадают.

И всё же надеюсь, в ваших словах была изрядная доля сарказма.

#4
18:11, 18 мая 2013

Sasha7b9, разобрался. Спасибо. :)

import flash.utils.ByteArray;
import flash.media.Sound;

[Embed(source = "click.mp3", mimeType = "application/octet-stream")] var embed_sound:Class;
 
var s_ba:ByteArray = new embed_sound() as ByteArray;

var s1:Sound = new Sound();
s1.loadCompressedDataFromByteArray( s_ba, s_ba.length );

var s2:Sound = new imported_sound() as Sound;

trace( s1.length, s2.length );
 
btn1.addEventListener( MouseEvent.CLICK, Play1 );
btn2.addEventListener( MouseEvent.CLICK, Play2 );
 
function Play1( e:MouseEvent ):void {
  s1.play();
}
function Play2( e:MouseEvent ):void {
  s2.play();
}

Правда, теперь первый звук стал длиннее, чем второй. Но это уже неважно. :) Работает, как хотел.

И всё же надеюсь, в ваших словах была изрядная доля сарказма.
Хоть кто-то меня понимает. :)
ПрограммированиеФорумЗвук

Тема в архиве.