1

異なるフォーマット間でオーディオ ファイルを変換しても、オーディオ ファイルの合計再生時間に違いはないと思います。

たとえば、合計時間が 2 秒間の wave ファイルを記録すると、そのサイズは 20.3 MB になります。ffmpeg の最新ビルドを使用して、この wave ファイルを mp3 ファイルに変換すると、サイズは 1.35 mb になります。以下のコードを使用して、同じ変換された MP3 ファイルの継続時間を取得します。

public static String getDurationWithMp3Spi(File file)
            throws UnsupportedAudioFileException, IOException, Exception {

        AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
        System.out.println(" File for duration MP3 " + file.getAbsolutePath());
        if (fileFormat instanceof TAudioFileFormat) {
            Map<?, ?> properties = ((TAudioFileFormat) fileFormat).properties();
            String key = "duration";
            Long microseconds = (Long) properties.get(key);
            int mili = (int) (microseconds / 1000);
            int sec = (mili / 1000) % 60;
            int min = (mili / 1000) / 60;

            String mp3Len = null;
            String mins = null;
            String secs = null;

            if (min == 0) {
                mins = "00";
            }

            if (min < 10) {
                mins = "0" + min;
            }else{
                mins = "" + min;
            }

            if (sec == 0) {
                secs = "00";
            }

            if (sec < 10) {
                secs = "0" + sec;
            }else{
                secs = ""+secs;
            }

            mp3Len = mins + ":" + secs;

            System.out.println("time = " + min + ":" + sec);


            return mp3Len;
        } else {
            throw new UnsupportedAudioFileException();
        }

    }

Windows Media Player やその他のプレーヤーで見ると、元の wave と同じ期間が表示されますが、この方法で取得すると、元のものとは異なり、違いは非常に大きくなります。

音声ファイルを WAVE から MP3 に変換した場合、またはその逆に変換した場合、オーディオ ファイルの継続時間に違いはありますか?

助けてください。上記のコードはMP3SPIプラグインを使用しています。

上記のメソッドは変換を行い、期間を取得します。

for (Iterator<FileItem> fileIter = fileList.iterator(); fileIter
                .hasNext();) {

            FileItem fileItem = fileIter.next();

            // write file to disk to specified path
            if (!fileItem.isFormField()) {

                String fileName = fileItem.getName();

                System.out.println(" file Name " + fileName);

                // save file to desired destination
                waveFileSavePath = processFolderAppendee(waveFileSavePath,
                        fileName);

                File waveFile = new File(waveFileSavePath);

                fileItem.write(waveFile);

                Thread.sleep(100);

                // do conversion
                String mp3FileName = fileName.replace("wav", "mp3");
                mp3Path = mp3Path + "/" + mp3FileName;
                convertToMP3(servletContext, waveFileSavePath, mp3Path);

                Thread.sleep(100);

                // prepare data(s)
                GuestMessagesForm guestMessageForm = prepareGuestMessageData(
                        accountId, waveFileSavePath, mp3Path);

                PlayListMessagesForm playListMessageForm = preparePlayListMessageData(accountId);

                // save data(s)

// このメソッドは期間を呼び出します saveGuestMessage(guestMessageForm); savePlayListMessage(playListMessageForm);

            } else {

                // do nothing
            }

            waveFileSavePath = servletContext.getRealPath(recordDir);
        }
4

0 に答える 0