{"id":1643,"date":"2010-08-19T12:30:42","date_gmt":"2010-08-19T10:30:42","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=1643"},"modified":"2012-03-03T13:07:00","modified_gmt":"2012-03-03T12:07:00","slug":"audio-format-a-law-pcm-froyo","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2010\/08\/19\/audio-format-a-law-pcm-froyo\/","title":{"rendered":"Lire un fichier audio au format a-law PCM avec Froyo"},"content":{"rendered":"<p>En juin, j&rsquo;avais publi\u00e9 un article expliquant comment <a href=\"\/whiler\/2010\/06\/21\/qr_code\/\">int\u00e9grer un code QR dynamique \u00e0 vos applications Android<\/a>&#8230; cette fois, suite \u00e0 des demandes que j&rsquo;ai eu apr\u00e8s avoir publi\u00e9 l&rsquo;application Android <a href=\"\/whiler\/2010\/08\/17\/w-freebox-messages-player\/\">W.Freebox Messages Player<\/a>, je vous offre un bout de code sans pr\u00e9tention qui permet de lire des fichiers <a href=\"http:\/\/fr.wikipedia.org\/wiki\/WAVEform_audio_format\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: wav\" style=\"\" >wav<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> encod\u00e9 au format <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Modulation_d&rsquo;impulsion_cod\u00e9e\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: a-law PCM\" style=\"\" >a-law PCM<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup>.<br \/>\nIl a le m\u00e9rite de fonctionner (test\u00e9 uniquement avec Froyo) m\u00eame s&rsquo;il est probablement facilement am\u00e9liorable. <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/happy.gif\" alt=\"(lol)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\nJe n&rsquo;ai pas r\u00e9invent\u00e9 la roue, je me suis content\u00e9 de mettre ensemble des bouts de codes trouv\u00e9s au fil du Web&#8230;<br \/>\n<!--more--><br \/>\nJe me contente de faire un copier\/coller de mon code en mettant en commentaire les lignes qui sont purement li\u00e9es \u00e0 mon application. Si vous avez des questions, vous pouvez poster des commentaires&#8230; j&rsquo;essayerai d&rsquo;y r\u00e9pondre <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\nCe premier bout de code permet de faire lire un son \u00e0 Android en passant directement par un tableau de bytes (<a target=\"_blank\" href=\"https:\/\/jongladwin.blogspot.com\/2010\/03\/android-play-pcmwav-audio-buffer-using.html\">Source<\/a>). Il fait appel \u00e0 <code class=\"codecolorer java dawn\"><span class=\"java\">FreeConverter.<span class=\"me1\">free2pcm<\/span><\/span><\/code> qui est dans le second bloc de code&#8230;<\/p>\n<div class=\"codecolorer-container java dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/><\/div><\/td><td><div class=\"java codecolorer\">&nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw4\">void<\/span> PlayAudioFileViaAudioTrack<span class=\"br0\">&#40;<\/span>Uri uri<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">throws<\/span> <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+ioexception\"><span class=\"kw3\">IOException<\/span><\/a> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>uri <span class=\"sy0\">==<\/span> <span class=\"kw2\">null<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"co1\">\/\/&nbsp; &nbsp; &nbsp; sError = getString(R.string.NullFilepath);<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> byteData <span class=\"sy0\">=<\/span> <span class=\"kw2\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> byteDataPCM <span class=\"sy0\">=<\/span> <span class=\"kw2\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> iSize <span class=\"sy0\">=<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; ContentResolver cr <span class=\"sy0\">=<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">getContentResolver<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+inputstream\"><span class=\"kw3\">InputStream<\/span><\/a> is <span class=\"sy0\">=<\/span> cr.<span class=\"me1\">openInputStream<\/span><span class=\"br0\">&#40;<\/span>uriFile<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">try<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; byteData <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span>is.<span class=\"me1\">available<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; iSize <span class=\"sy0\">=<\/span> is.<span class=\"me1\">read<\/span><span class=\"br0\">&#40;<\/span>byteData<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; is.<span class=\"me1\">close<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; byteDataPCM <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span>iSize <span class=\"sy0\">*<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Pour \u00e9viter de pourrir encore plus le son, je convertis du 8kHz en 16kHz... d'o\u00f9 le x2<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/&nbsp; &nbsp; &nbsp; FreeConverter.free2pcm(byteData, 0, byteDataPCM, 0, iSize, false, (sbVolume.getProgress() + 1));<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FreeConverter.<span class=\"me1\">free2pcm<\/span><span class=\"br0\">&#40;<\/span>byteData, <span class=\"nu0\">0<\/span>, byteDataPCM, <span class=\"nu0\">0<\/span>, iSize, <span class=\"kw2\">false<\/span>, <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> intSize <span class=\"sy0\">=<\/span> android.<span class=\"me1\">media<\/span>.<span class=\"me1\">AudioTrack<\/span>.<span class=\"me1\">getMinBufferSize<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">8000<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+audioformat\"><span class=\"kw3\">AudioFormat<\/span><\/a>.<span class=\"me1\">CHANNEL_CONFIGURATION_MONO<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+audioformat\"><span class=\"kw3\">AudioFormat<\/span><\/a>.<span class=\"me1\">ENCODING_PCM_16BIT<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; AudioTrack at <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> AudioTrack<span class=\"br0\">&#40;<\/span>AudioManager.<span class=\"me1\">STREAM_DTMF<\/span>, <span class=\"nu0\">8000<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+audioformat\"><span class=\"kw3\">AudioFormat<\/span><\/a>.<span class=\"me1\">CHANNEL_CONFIGURATION_MONO<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+audioformat\"><span class=\"kw3\">AudioFormat<\/span><\/a>.<span class=\"me1\">ENCODING_PCM_16BIT<\/span>, intSize, AudioTrack.<span class=\"me1\">MODE_STREAM<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; at.<span class=\"me1\">setStereoVolume<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span>, <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>at <span class=\"sy0\">!=<\/span> <span class=\"kw2\">null<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; at.<span class=\"me1\">play<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; at.<span class=\"me1\">write<\/span><span class=\"br0\">&#40;<\/span>byteDataPCM, <span class=\"nu0\">0<\/span>, byteDataPCM.<span class=\"me1\">length<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; at.<span class=\"me1\">stop<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; at.<span class=\"me1\">release<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"co1\">\/\/&nbsp; &nbsp; &nbsp; &nbsp; sError = getString(R.string.AudioTrackNotInitialised);<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">catch<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+filenotfoundexception\"><span class=\"kw3\">FileNotFoundException<\/span><\/a> e<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n<span class=\"co1\">\/\/&nbsp; &nbsp; &nbsp; sError = getString(R.string.FileNotFoundException);<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p><!--nextpage--><br \/>\nLa conversion du format est op\u00e9r\u00e9e ainsi (<a target=\"_blank\" href=\"https:\/\/svn.typo3.org\/TYPO3v4\/Extensions\/jclic_ef\/JClic_ef\/src\/org\/tritonus\/share\/sampled\/TConversionTool.java\">Source<\/a>)&nbsp;:<\/p>\n<div class=\"codecolorer-container java dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/><\/div><\/td><td><div class=\"java codecolorer\"><span class=\"kw1\">package<\/span> <span class=\"co2\">org.whiler.freebox.messages.player<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">public<\/span> <span class=\"kw1\">class<\/span> FreeConverter <span class=\"br0\">&#123;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">private<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">short<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> a2l <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span> <span class=\"sy0\">-<\/span><span class=\"nu0\">5504<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">5248<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">6016<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">5760<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">4480<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">4224<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">4992<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">4736<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">7552<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">7296<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">8064<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">7808<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">6528<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">6272<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">7040<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">6784<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">2752<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2624<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3008<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2880<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2240<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2112<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2496<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2368<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3776<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3648<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">4032<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3904<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3264<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3136<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3520<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">3392<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">22016<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">20992<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">24064<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">23040<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">17920<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">16896<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">19968<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">18944<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">30208<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">29184<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">32256<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">31232<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">26112<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">25088<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">28160<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">27136<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">11008<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">10496<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">12032<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">11520<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">8960<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">8448<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">9984<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">9472<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">15104<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">14592<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">16128<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">15616<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">13056<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">12544<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">14080<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">13568<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">344<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">328<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">376<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">360<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">280<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">264<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">312<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">296<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">472<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">456<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">504<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">488<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">408<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">392<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">440<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">424<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">88<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">72<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">120<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">104<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">24<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">8<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">56<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">40<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">216<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">200<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">248<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">232<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">152<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">136<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">184<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">168<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1376<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1312<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1504<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">1440<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1120<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1056<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1248<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1184<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1888<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1824<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">2016<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1952<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1632<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">1568<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1760<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1696<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">688<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">656<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">752<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">720<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">560<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">528<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">624<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">592<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"sy0\">-<\/span><span class=\"nu0\">944<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">912<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">1008<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">976<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">816<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">784<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">880<\/span>, <span class=\"sy0\">-<\/span><span class=\"nu0\">848<\/span>, <span class=\"nu0\">5504<\/span>, <span class=\"nu0\">5248<\/span>, <span class=\"nu0\">6016<\/span>, <span class=\"nu0\">5760<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">4480<\/span>, <span class=\"nu0\">4224<\/span>, <span class=\"nu0\">4992<\/span>, <span class=\"nu0\">4736<\/span>, <span class=\"nu0\">7552<\/span>, <span class=\"nu0\">7296<\/span>, <span class=\"nu0\">8064<\/span>, <span class=\"nu0\">7808<\/span>, <span class=\"nu0\">6528<\/span>, <span class=\"nu0\">6272<\/span>, <span class=\"nu0\">7040<\/span>, <span class=\"nu0\">6784<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">2752<\/span>, <span class=\"nu0\">2624<\/span>, <span class=\"nu0\">3008<\/span>, <span class=\"nu0\">2880<\/span>, <span class=\"nu0\">2240<\/span>, <span class=\"nu0\">2112<\/span>, <span class=\"nu0\">2496<\/span>, <span class=\"nu0\">2368<\/span>, <span class=\"nu0\">3776<\/span>, <span class=\"nu0\">3648<\/span>, <span class=\"nu0\">4032<\/span>, <span class=\"nu0\">3904<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">3264<\/span>, <span class=\"nu0\">3136<\/span>, <span class=\"nu0\">3520<\/span>, <span class=\"nu0\">3392<\/span>, <span class=\"nu0\">22016<\/span>, <span class=\"nu0\">20992<\/span>, <span class=\"nu0\">24064<\/span>, <span class=\"nu0\">23040<\/span>, <span class=\"nu0\">17920<\/span>, <span class=\"nu0\">16896<\/span>, <span class=\"nu0\">19968<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">18944<\/span>, <span class=\"nu0\">30208<\/span>, <span class=\"nu0\">29184<\/span>, <span class=\"nu0\">32256<\/span>, <span class=\"nu0\">31232<\/span>, <span class=\"nu0\">26112<\/span>, <span class=\"nu0\">25088<\/span>, <span class=\"nu0\">28160<\/span>, <span class=\"nu0\">27136<\/span>, <span class=\"nu0\">11008<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">10496<\/span>, <span class=\"nu0\">12032<\/span>, <span class=\"nu0\">11520<\/span>, <span class=\"nu0\">8960<\/span>, <span class=\"nu0\">8448<\/span>, <span class=\"nu0\">9984<\/span>, <span class=\"nu0\">9472<\/span>, <span class=\"nu0\">15104<\/span>, <span class=\"nu0\">14592<\/span>, <span class=\"nu0\">16128<\/span>, <span class=\"nu0\">15616<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">13056<\/span>, <span class=\"nu0\">12544<\/span>, <span class=\"nu0\">14080<\/span>, <span class=\"nu0\">13568<\/span>, <span class=\"nu0\">344<\/span>, <span class=\"nu0\">328<\/span>, <span class=\"nu0\">376<\/span>, <span class=\"nu0\">360<\/span>, <span class=\"nu0\">280<\/span>, <span class=\"nu0\">264<\/span>, <span class=\"nu0\">312<\/span>, <span class=\"nu0\">296<\/span>, <span class=\"nu0\">472<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">456<\/span>, <span class=\"nu0\">504<\/span>, <span class=\"nu0\">488<\/span>, <span class=\"nu0\">408<\/span>, <span class=\"nu0\">392<\/span>, <span class=\"nu0\">440<\/span>, <span class=\"nu0\">424<\/span>, <span class=\"nu0\">88<\/span>, <span class=\"nu0\">72<\/span>, <span class=\"nu0\">120<\/span>, <span class=\"nu0\">104<\/span>, <span class=\"nu0\">24<\/span>, <span class=\"nu0\">8<\/span>, <span class=\"nu0\">56<\/span>, <span class=\"nu0\">40<\/span>, <span class=\"nu0\">216<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">200<\/span>, <span class=\"nu0\">248<\/span>, <span class=\"nu0\">232<\/span>, <span class=\"nu0\">152<\/span>, <span class=\"nu0\">136<\/span>, <span class=\"nu0\">184<\/span>, <span class=\"nu0\">168<\/span>, <span class=\"nu0\">1376<\/span>, <span class=\"nu0\">1312<\/span>, <span class=\"nu0\">1504<\/span>, <span class=\"nu0\">1440<\/span>, <span class=\"nu0\">1120<\/span>, <span class=\"nu0\">1056<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">1248<\/span>, <span class=\"nu0\">1184<\/span>, <span class=\"nu0\">1888<\/span>, <span class=\"nu0\">1824<\/span>, <span class=\"nu0\">2016<\/span>, <span class=\"nu0\">1952<\/span>, <span class=\"nu0\">1632<\/span>, <span class=\"nu0\">1568<\/span>, <span class=\"nu0\">1760<\/span>, <span class=\"nu0\">1696<\/span>, <span class=\"nu0\">688<\/span>, <span class=\"nu0\">656<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">752<\/span>, <span class=\"nu0\">720<\/span>, <span class=\"nu0\">560<\/span>, <span class=\"nu0\">528<\/span>, <span class=\"nu0\">624<\/span>, <span class=\"nu0\">592<\/span>, <span class=\"nu0\">944<\/span>, <span class=\"nu0\">912<\/span>, <span class=\"nu0\">1008<\/span>, <span class=\"nu0\">976<\/span>, <span class=\"nu0\">816<\/span>, <span class=\"nu0\">784<\/span>, <span class=\"nu0\">880<\/span>, <span class=\"nu0\">848<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> free2pcm<span class=\"br0\">&#40;<\/span><span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> inBuffer, <span class=\"kw4\">int<\/span> inByteOffset,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> outBuffer, <span class=\"kw4\">int<\/span> outByteOffset, <span class=\"kw4\">int<\/span> sampleCount, <span class=\"kw4\">boolean<\/span> bigEndian<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; free2pcm<span class=\"br0\">&#40;<\/span>inBuffer, inByteOffset, outBuffer, outByteOffset, sampleCount,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; bigEndian, <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> free2pcm<span class=\"br0\">&#40;<\/span><span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> inBuffer, <span class=\"kw4\">int<\/span> inByteOffset,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> outBuffer, <span class=\"kw4\">int<\/span> outByteOffset, <span class=\"kw4\">int<\/span> sampleCount, <span class=\"kw4\">boolean<\/span> bigEndian,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">int<\/span> volume<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> shortIndex <span class=\"sy0\">=<\/span> outByteOffset<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw4\">int<\/span> alawIndex <span class=\"sy0\">=<\/span> inByteOffset<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">while<\/span> <span class=\"br0\">&#40;<\/span>sampleCount <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; intToBytes16<span class=\"br0\">&#40;<\/span>a2l<span class=\"br0\">&#91;<\/span>inBuffer<span class=\"br0\">&#91;<\/span>alawIndex<span class=\"sy0\">++<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#93;<\/span>, outBuffer, shortIndex<span class=\"sy0\">++<\/span>, bigEndian, volume<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; shortIndex<span class=\"sy0\">++;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; sampleCount<span class=\"sy0\">--;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> <span class=\"kw4\">void<\/span> intToBytes16<span class=\"br0\">&#40;<\/span><span class=\"kw4\">int<\/span> sample, <span class=\"kw4\">byte<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span> buffer, <span class=\"kw4\">int<\/span> byteOffset,<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw4\">boolean<\/span> bigEndian, <span class=\"kw4\">int<\/span> volume<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>bigEndian<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; buffer<span class=\"br0\">&#91;<\/span>byteOffset<span class=\"sy0\">++<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">byte<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>sample <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">*<\/span> volume<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; buffer<span class=\"br0\">&#91;<\/span>byteOffset<span class=\"sy0\">--<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">byte<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>sample <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">*<\/span> volume<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; buffer<span class=\"br0\">&#91;<\/span>byteOffset<span class=\"sy0\">++<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">byte<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>sample <span class=\"sy0\">&amp;<\/span> 0xFF<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">*<\/span> volume<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; buffer<span class=\"br0\">&#91;<\/span>byteOffset<span class=\"sy0\">--<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy0\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw4\">byte<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>sample <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">*<\/span> volume<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Voila, c&rsquo;est tout&nbsp;! Le plus long a \u00e9t\u00e9 de trouver <a target=\"_blank\" href=\"https:\/\/tinyurl.com\/23og997\">les bonnes sources sur Internet<\/a>, et de comprendre un minimum la structure du format (pour jouer sur le volume <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> )&#8230;<\/p>\n<p>Cet article vous a aid\u00e9 pour votre application&#8230; vous avez le droit de mettre un remerciement dans celle-ci pour montrer votre gratitude <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/cool.gif\" alt=\"8-)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>En juin, j\u2019avais publi\u00e9 un article expliquant comment int\u00e9grer un code QR dynamique \u00e0 vos applications Android\u2026 cette fois, suite \u00e0 des demandes que j\u2019ai eu apr\u00e8s avoir publi\u00e9 l\u2019application Android W.Freebox Messages Player, je vous offre un bout de code sans pr\u00e9tention qui permet de lire des fichiers wav encod\u00e9 au format a-law PCM&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[132,6],"tags":[158,15,27,134,135],"class_list":["post-1643","post","type-post","status-publish","format-standard","hentry","category-android","category-dev","tag-android","tag-api","tag-coloration-syntaxique","tag-java","tag-son"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/1643","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=1643"}],"version-history":[{"count":0,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/1643\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=1643"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=1643"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=1643"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}