I diged into it but nothing came out so far.
I tried online forums as well but they used almost same method but with mp3
files.. I looked into sound Manager 2 and many other fallback API's but
they play sound with mp3 files. Use of IE is huge and people haven't
upgraded to Windows 10. Sound is very important.
If anyone have any ideas please share.

Thanks and Regards,
Amarjeet Singh

On Nov 11, 2017 12:57, "Amarjeet Singh" <[email protected]> wrote:

Hi Frode,

I tried what you said in the above mail thread.


console.log(this.flashElement);


*T**he response I get  in the console ( Please refer the attachment ):-*

Couldn't create AudioContext:ReferenceError: 'AudioContext' is undefined,
> falling back to flash player


<object width="8" height="8" id="guacamole-flashelement-1"
> data="guacamole.swf" type="application/x-shockwave-flash"
> style="visibility: visible;"><param name="allowScriptAccess"
> value="always"></object>


Error : *SCRIPT438: Object doesn't support property or method 'write'*



Regards,
Amarjeet


On Sat, Nov 11, 2017 at 4:30 AM, Frode Langelo <[email protected]> wrote:

> Hi Amarjeet,
>
> I am assuming the line this.flashElement.write(...) causes this:
> Error : *SCRIPT438: Object doesn't support property or method 'write'*
>
> Unfortunately I am not a Flash expert.. I'd check some of the Flash
> related forums for  JavaScript/Flash integration.
> How are you loading your Flash element? I would start looking there..
> the culprit appears to be JavaScript not able to access the 'write'
> method exposed via ExternalInterface.addCallback in the ActionScript.
> Perhaps Flash was not yet ready when you call the write method? What
> does console.log(this.flashElement); say, just before calling
> this.flashElement.write(...) ?
>
> Kind regards.
> Frode
>
> On Fri, Nov 10, 2017 at 12:03 PM, Amarjeet Singh <[email protected]>
> wrote:
> >>
> >> varfloatBuffer = toAudioBuffer(new SampleArray(arrayBuffer));
> >> sendToFlash(floatBuffer.buffer);
> >
> >
> > It doesn't worked.  I am getting the error in the console log while
> calling
> > flash.write method
> >
> > Error : *SCRIPT438: Object doesn't support property or method 'write'*
> >
> > While I am trying the below code it is playing the sound with no errors:-
> >
> >   var sampledata = [];
> >>         var freq = 440;
> >>         var interval = null;
> >>         var guacamole= new Guacamole({'swf': 'guacamole.swf'});
> >>
> >>         function start() {
> >>             interval = setInterval(function() {
> >>                 var n = Math.ceil(freq / 100) * 2;
> >>                 for (var i=0; i < n; i++) {
> >>                     guacamole.write(sampledata);  // calls
> Guacamole.write
> >>                 }
> >>             }, 10);
> >>         }
> >
> >         function createSound() {
> >>             var samples = 44100 / freq;
> >>             sampledata = Array(Math.round(samples));
> >>             for (var i=0; i < sampledata.length; i++) {
> >>                 sampledata[i] = Math.sin(2*Math.PI * (i /
> >> sampledata.length));
> >>             }
> >>         }
> >
> > createSound();start();
> >
> >
> >
> >
> >> Guacamole.write: function(samples) {
> >>             var out = new Array(samples.length);
> >>             for (var i = 0;i < samples.length; i++) {
> >>                 out[i] = this.floatToIntSample(samples[i]);
> >>             }
> >>           as = out.join(' ');
> >>             this.flashElement.write(as); // this write calls the
> >> flash.write
> >>     },
> >
> > floatToIntSample: function(value) {
> >>         return Math.floor(value * 32768); // from -1..1 to -32767..32768
> >> range
> >>     }
> >
> >
> > swf is embedded in HTML document ..
> >
> >
> >
> > Please give any suggestions ... What I am missing here ?
> > I have data coming in audio stream and  I have swf  to play the sound but
> > something with the flow of PCM data to swf is missing.
> >
> >
> > On Fri, Nov 10, 2017 at 10:50 PM, Frode Langelo <[email protected]>
> wrote:
> >
> >> On Fri, Nov 10, 2017 at 3:12 AM, Amarjeet Singh <[email protected]>
> >> wrote:
> >> > Hi Frode,
> >> >
> >> > I really appreciate the response and guidance you provided. It helped
> me
> >> to
> >> > look for more options and created lot of questions in my mind as well.
> >> >
> >> > *1. How can I skip these  lines in toAudioBuffer ?*
> >> >
> >> >   var packetTime = context.currentTime;
> >> >         if (nextPacketTime < packetTime)
> >> >             nextPacketTime = packetTime;
> >> >   var audioBuffer = context.createBuffer(format.channels, samples,
> >> > format.rate);
> >> >
> >> > It requires *context.currentTime* but in case of IE context is NULL
> and
> >> > nothing will be returned in *packetTime*.
> >>
> >> For the purpose of only converting to a float array, you could try
> >> something like:
> >>
> >> var toAudioBuffer = function toAudioBuffer(data) {
> >>
> >>     // Calculate total number of samples
> >>     var samples = data.length / format.channels;
> >>
> >>     // Create the Float output audio buffer
> >>     var audioBuffer = new window.Float32Array(data.length);
> >>
> >>     // Convert each channel
> >>     for (var channel = 0; channel < format.channels; channel++) {
> >>
> >>         // Fill audio buffer with data for channel
> >>         var offset = channel;
> >>         for (var i = 0; i < samples; i++) {
> >>             audioData[offset] = data[offset] / maxSampleValue;
> >>             offset += format.channels;
> >>         }
> >>
> >>     }
> >>
> >>     return audioBuffer;
> >>
> >> };
> >>
> >>
> >> > *2. Can I skip pushAudioPacket () and shiftAudioPacket() methods as
> well
> >> ?
> >> > ( I don't know what these methods are trying to do.. )*
> >>
> >> These methods are used to buffer, synchronize audio packet playback,
> >> and rearrange (and split) the packets so that the packets are cut
> >> where the audio volume is at a low point to reduce the amount of
> >> audible clipping between packets played back. Fot the purpose of
> >> getting your prototype working I wouldn't worry about this for now;
> >> but when you are going for a complete implementation you should look
> >> at creating a new AudioPlayer implementation for your Flash audio
> >> player.
> >>
> >> > *3. Do I need nextPacketTime as well ? *
> >> >
> >> >      ( source.start(nextPacketTime); )
> >>
> >> Not yet (see above comment)
> >>
> >> > *4. Can I directly call  toAudioBuffer function passing ArrayBuffer of
> >> 6048
> >> > byte  and skip the packetTime and context.createBuffer ?*
> >>
> >> The toAudioBuffer function expects a SampleArray which in this case is
> >> an Int16Array. You could do toAudioBuffer(new
> >> SampleArray(arrayBuffer));
> >> If you look at the implementation of RawAudioPlayer, it receives the
> >> raw audio data in playReceivedAudio from ArrayBufferReader.ondata.
> >>
> >> > *5. If I use Int16Array over ArrayBuffer It view the data in integers
> of
> >> 16
> >> > byte and if use the following for loop:
> >> > [snip]
> >> > It will push the data for left channel together and right channel
> >> together
> >> > into an array.
> >> > Now, Can I pass this data to my Flash Action Script in a string to
> play
> >> at
> >> > 44.1Khz with 2 channels ?
> >>
> >> You would need to pass the underlying ArrayBuffer to your Flash
> >> script. I am not sure if it can consume it directly though.
> >>
> >> var floatBuffer = toAudioBuffer(new SampleArray(arrayBuffer));
> >> sendToFlash(floatBuffer.buffer);
> >>
> >>
> >> > I would be very grateful if you look into the above queries and give
> some
> >> > guidance so that I can move forward.
> >> >
> >> > Thanks and Regards,
> >> > Amarjeet Singh
> >> >
> >>
>

Reply via email to