Eu estava tentando clonar o discord e descobri que eles usam formatos ogg para áudio (eu acho), estou tentando fazer com que a duração do áudio seja armazenada no banco de dados.
Uma solução stackoverflow sobre como obter a duração do áudio OGG, achei fascinante. A abordagem envolve procurar o final do arquivo, encontrar o último cabeçalho da página Ogg e ler a posição do grânulo.
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; iResolvi compartilhar aqui, só achei a implementação muito legal e talvez ajudar outras pessoas
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3