كنت أحاول استنساخ Discord واكتشفت أنهم يستخدمون تنسيقات ogg للصوت (على ما أعتقد)، أحاول الحصول على مدة الصوت لتخزينها في قاعدة البيانات.
لقد وجدت حلاً رائعًا للحصول على مدة صوت OGG. يتضمن الأسلوب البحث عن نهاية الملف، والعثور على آخر رأس صفحة Ogg، وقراءة موضعه الحبيبي.
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قررت مشاركته هنا، لقد وجدت التنفيذ رائعًا جدًا وربما أساعد بعض الأشخاص الآخرين
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3