Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengira Tempoh Audio Ogg dalam Go: Panduan Langkah demi Langkah

Mengira Tempoh Audio Ogg dalam Go: Panduan Langkah demi Langkah

PHPz
PHPzasal
2024-09-05 21:31:09423semak imbas

Calculating Ogg Audio Duration in Go: A Step-by-Step Guide

Saya cuba mengklon perselisihan dan saya mendapati mereka menggunakan format ogg untuk audio (saya rasa), saya cuba mendapatkan tempoh audio untuk disimpan dalam pangkalan data.

Penyelesaian stackoverflow tentang mendapatkan tempoh audio OGG, saya rasa menarik. Pendekatan ini melibatkan pencarian ke penghujung fail, mencari pengepala halaman Ogg terakhir dan membaca kedudukan butirannya.

func getOggDurationMs(reader io.Reader) (int64, error) {
    // Read the entire Ogg file into a byte slice
    data, err := io.ReadAll(reader)
    if err != nil {
        return 0, fmt.Errorf("error reading Ogg file: %w", err)
    }

    // Search for the "OggS" signature and calculate the length
    var length int64
    for i := len(data) - 14; i >= 0 && length == 0; i-- {
        if data[i] == 'O' && data[i+1] == 'g' && data[i+2] == 'g' && data[i+3] == 'S' {
            length = int64(readLittleEndianInt(data[i+6 : i+14]))
        }
    }

    // Search for the "vorbis" signature and calculate the rate
    var rate int64
    for i := 0; i < len(data)-14 && rate == 0; i++ {
        if data[i] == 'v' && data[i+1] == 'o' && data[i+2] == 'r' && data[i+3] == 'b' && data[i+4] == 'i' && data[i+5] == 's' {
            rate = int64(readLittleEndianInt(data[i+11 : i+15]))
        }
    }

    if length == 0 || rate == 0 {
        return 0, fmt.Errorf("could not find necessary information in Ogg file")
    }

    durationMs := length * 1000 / rate
    return durationMs, nil
}

func readLittleEndianInt(data []byte) int64 {
    return int64(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16 | uint32(data[3])<<24)
}

Saya memutuskan untuk berkongsi di sini, saya mendapati pelaksanaannya sangat bagus dan mungkin membantu beberapa orang lain

Atas ialah kandungan terperinci Mengira Tempoh Audio Ogg dalam Go: Panduan Langkah demi Langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Penanda aras dengan GolangArtikel seterusnya:Penanda aras dengan Golang