コード例 #1
0
ファイル: song.py プロジェクト: PubFork/bard
 def calculateSilences(self, threshold=None, min_length=None):
     try:
         audio_segment = AudioSegment.from_file(self.path())
     except PydubException as exc:
         print('Error processing:', self.path(), ':', exc)
         raise
     self._audioSha256sum = calculateSHA256_data(audio_segment.raw_data)
     thr = threshold or Song.silence_threshold
     minlen = min_length or Song.min_silence_length
     silences = detect_silence_at_beginning_and_end(audio_segment,
                                                    min_silence_len=minlen,
                                                    silence_thresh=thr)
     if silences:
         silence1, silence2 = silences
         self._silenceAtStart = (silence1[1] - silence1[0]) / 1000
         self._silenceAtEnd = (silence2[1] - silence2[0]) / 1000
コード例 #2
0
ファイル: song.py プロジェクト: azhaocn/bard
 def calculateSilences(self, threshold=None, min_length=None):
     try:
         audio_segment = AudioSegment.from_file(self.path())
     except:
         print('Error processing:',path)
         raise
     self._audioSha256sum = calculateSHA256_data(audio_segment.raw_data)
     thr = threshold or Song.silence_threshold
     minlen = min_length or Song.min_silence_length
     silences = detect_silence_at_beginning_and_end(audio_segment,
                                                    min_silence_len=minlen,
                                                    silence_thresh=thr)
     if silences:
         silence1, silence2 = silences
         self._silenceAtStart = (silence1[1] - silence1[0]) / 1000
         self._silenceAtEnd = (silence2[1] - silence2[0]) / 1000
コード例 #3
0
def remoteFileAudioSha256Sum(path, sftp):
    data = remoteFile(path, sftp)
    if not data:
        return None
    audio_segment = AudioSegment.from_file(data)
    return calculateSHA256_data(audio_segment.raw_data)
コード例 #4
0
ファイル: song.py プロジェクト: PubFork/bard
    def loadFile(self, filething):
        fileinfo = filething if isinstance(filething, str) \
            else 'file-like object'
        if hasattr(filething, 'seek'):
            filething.seek(0)
        try:
            # if path.lower().endswith('.ape') or
            #    path.lower().endswith('.wma') or
            #    path.lower().endswith('.m4a') or
            #    path.lower().endswith('.mp3'):
            self.metadata = mutagen.File(filething)
            # else:
            #     self.metadata = mutagen.File(filething, easy=True)
        except mutagen.mp3.HeaderNotFoundError as e:
            print(
                TerminalColors.Error + "Error" + TerminalColors.ENDC +
                " reading %s:" % filething, e)
            raise

        if not self.metadata:
            print("No metadata found for %s : "
                  "This will probably cause problems" % filething)

        formattext = {
            mutagen.mp3.EasyMP3: 'mp3',
            mutagen.mp3.MP3: 'mp3',
            mutagen.easymp4.EasyMP4: 'mp4',
            mutagen.mp4.MP4: 'mp4',
            mutagen.asf.ASF: 'asf',
            mutagen.flac.FLAC: 'flac',
            mutagen.oggvorbis.OggVorbis: 'ogg',
            mutagen.oggopus.OggOpus: 'opus',
            mutagen.wavpack.WavPack: 'wv',
            mutagen.monkeysaudio.MonkeysAudio: 'ape',
            mutagen.musepack.Musepack: 'mpc',
        }
        self._format = formattext[type(self.metadata)]

        # try:
        #    if hasattr(filething, 'seek'):
        #        filething.seek(0)
        #        # Workaround for pydub closing filething
        #        #backup = filething.close
        #        #filething.close = lambda: None
        #
        #    audio_segment = AudioSegment.from_file(filething)
        #
        #    #if hasattr(filething, 'seek'):
        #    #    filething.close = backup
        # except:
        #    print('Error processing:', fileinfo)
        #    raise
        # self._audioSha256sum = calculateSHA256_data(audio_segment.raw_data)
        # if hasattr(filething, 'seek'):
        #     filething.seek(0)
        # try:
        #     self._audioSha256sum, audiodata, properties = \
        #         calculateAudioTrackSHA256_pyav(filething)
        # except ValueError as exc:
        #     print(f'Error processing {fileinfo}: {exc}')
        #     raise

        audiodata, properties = decodeAudio(filething)

        self._audioSha256sum = calculateSHA256_data(audiodata)

        self._decode_properties = properties

        if properties.messages:
            print('\n'.join([str(x) for x in properties.messages]))

        if self.metadata:
            if not getattr(self.metadata.info, 'bits_per_sample', None):
                self.metadata.info.bits_per_sample = \
                    properties.decoded_bytes_per_sample * 8

            if not getattr(self.metadata.info, 'bitrate', None):
                self.metadata.info.bitrate = (properties.stream_bitrate
                                              or properties.container_bitrate)

        if config['enable_internal_checks']:
            ffprobe_metadata = FFProbeMetadata(self.path())
            try:
                tmp_bits = int(
                    ffprobe_metadata['streams.stream.0.bits_per_raw_sample'])
            except ValueError:
                print("ffprobe doesn't provide bits per sample")
            else:
                if self.metadata.info.bits_per_sample != tmp_bits:
                    msg = ('bits_per_sample different! '
                           'ffprobe: %d != bard_audiofile: %d' %
                           (tmp_bits, self.metadata.info.bits_per_sample))
                    raise Exception(msg)
            tmp_bitrate = int(ffprobe_metadata['format.bit_rate'])
            if (properties.stream_bitrate != tmp_bitrate
                    and properties.container_bitrate != tmp_bitrate):
                msg = (
                    'bit_rate different! ffprobe: %d != bard_audiofile: %d' %
                    (tmp_bitrate or 0, properties.bitrate or 0))
                raise Exception(msg)
            print('ffprobe check ' + TerminalColors.Ok + 'OK' +
                  TerminalColors.ENDC)

        try:
            audio_segment = audioSegmentFromDataProperties(
                audiodata, properties)
        except ValueError as exc:
            print(f'Error processing {fileinfo}: {exc}')
            raise

        thr = Song.silence_threshold
        minlen = Song.min_silence_length
        silences = detect_silence_at_beginning_and_end(audio_segment,
                                                       min_silence_len=minlen,
                                                       silence_thresh=thr)
        if silences:
            silence1, silence2 = silences
            self._silenceAtStart = (silence1[1] - silence1[0]) / 1000
            self._silenceAtEnd = (silence2[1] - silence2[0]) / 1000

        if self.metadata:
            try:
                image = extractFrontCover(self.metadata)
            except OSError:
                print('Error extracting image from %s' % fileinfo)
                raise

            if image:
                (image, imagedata) = image
                self._coverWidth = image.width
                self._coverHeight = image.height
                self._coverMD5 = md5FromData(imagedata)

        try:
            self._mtime = os.path.getmtime(filething)
        except TypeError:
            self._mtime = None
        self._fileSha256sum = calculateFileSHA256(filething)

        self.fingerprint = self.getAcoustidFingerprint_data(
            audiodata, properties)
        if self.metadata and getattr(self.metadata, 'cuesheet', None):
            for track in self.metadata.cuesheet.tracks:
                if (track.track_number == 255 or track.start_offset
                        == self.metadata.info.total_samples):  # noqa
                    continue
                timepos = (self.metadata.info.length * track.start_offset /
                           self.metadata.info.total_samples)

                try:
                    title = self.metadata['SUBTRACKTITLES'][track.track_number
                                                            - 1]  # noqa
                except (KeyError, IndexError):
                    title = None
                ct = CueTrack(track.track_number, track.start_offset, timepos,
                              title)
                self.cuesheet.append(ct)

        self.isValid = True
コード例 #5
0
ファイル: song.py プロジェクト: azhaocn/bard
    def loadFile(self, path):
        try:
            # if path.lower().endswith('.ape') or
            #    path.lower().endswith('.wma') or
            #    path.lower().endswith('.m4a') or
            #    path.lower().endswith('.mp3'):
            self.metadata = mutagen.File(path)
            # else:
            #     self.metadata = mutagen.File(path, easy=True)
        except mutagen.mp3.HeaderNotFoundError as e:
            print("Error reading %s:" % path, e)
            raise

        if not self.metadata:
            print("No metadata found for %s : "
                  "This will probably cause problems" % path)

        formattext = {
            mutagen.mp3.EasyMP3: 'mp3',
            mutagen.mp3.MP3: 'mp3',
            mutagen.easymp4.EasyMP4: 'mp4',
            mutagen.mp4.MP4: 'mp4',
            mutagen.asf.ASF: 'asf',
            mutagen.flac.FLAC: 'flac',
            mutagen.oggvorbis.OggVorbis: 'ogg',
            mutagen.wavpack.WavPack: 'wv',
            mutagen.monkeysaudio.MonkeysAudio: 'ape',
            mutagen.musepack.Musepack: 'mpc', }
        self._format = formattext[type(self.metadata)]

        try:
            audio_segment = AudioSegment.from_file(path)
        except:
            print('Error processing:',path)
            raise
        self._audioSha256sum = calculateSHA256_data(audio_segment.raw_data)

        thr = Song.silence_threshold
        minlen = Song.min_silence_length
        silences = detect_silence_at_beginning_and_end(audio_segment,
                                                       min_silence_len=minlen,
                                                       silence_thresh=thr)
        if silences:
            silence1, silence2 = silences
            self._silenceAtStart = (silence1[1] - silence1[0]) / 1000
            self._silenceAtEnd = (silence2[1] - silence2[0]) / 1000

#        self.loadCoverImageData(path)
        try:
            image = extractFrontCover(self.metadata)
        except OSError:
            print('Error extracting image from %s' % path)
            raise

        if image:
            (image, data) = image
            self._coverWidth = image.width
            self._coverHeight = image.height
            self._coverMD5 = md5FromData(data)

        self._mtime = os.path.getmtime(path)
        self._fileSha256sum = calculateFileSHA256(path)

        self.fingerprint = self.getAcoustidFingerprint()

        self.isValid = True
コード例 #6
0
    def loadFile(self, path):
        try:
            # if path.lower().endswith('.ape') or
            #    path.lower().endswith('.wma') or
            #    path.lower().endswith('.m4a') or
            #    path.lower().endswith('.mp3'):
            self.metadata = mutagen.File(path)
            # else:
            #     self.metadata = mutagen.File(path, easy=True)
        except mutagen.mp3.HeaderNotFoundError as e:
            print("Error reading %s:" % path, e)
            raise

        if not self.metadata:
            print("No metadata found for %s : "
                  "This will probably cause problems" % path)

        formattext = {
            mutagen.mp3.EasyMP3: 'mp3',
            mutagen.mp3.MP3: 'mp3',
            mutagen.easymp4.EasyMP4: 'mp4',
            mutagen.mp4.MP4: 'mp4',
            mutagen.asf.ASF: 'asf',
            mutagen.flac.FLAC: 'flac',
            mutagen.oggvorbis.OggVorbis: 'ogg',
            mutagen.wavpack.WavPack: 'wv',
            mutagen.monkeysaudio.MonkeysAudio: 'ape',
            mutagen.musepack.Musepack: 'mpc',
        }
        self._format = formattext[type(self.metadata)]

        try:
            audio_segment = AudioSegment.from_file(path)
        except:
            print('Error processing:', path)
            raise
        self._audioSha256sum = calculateSHA256_data(audio_segment.raw_data)

        thr = Song.silence_threshold
        minlen = Song.min_silence_length
        silences = detect_silence_at_beginning_and_end(audio_segment,
                                                       min_silence_len=minlen,
                                                       silence_thresh=thr)
        if silences:
            silence1, silence2 = silences
            self._silenceAtStart = (silence1[1] - silence1[0]) / 1000
            self._silenceAtEnd = (silence2[1] - silence2[0]) / 1000

#        self.loadCoverImageData(path)
        try:
            image = extractFrontCover(self.metadata)
        except OSError:
            print('Error extracting image from %s' % path)
            raise

        if image:
            (image, data) = image
            self._coverWidth = image.width
            self._coverHeight = image.height
            self._coverMD5 = md5FromData(data)

        self._mtime = os.path.getmtime(path)
        self._fileSha256sum = calculateFileSHA256(path)

        self.fingerprint = self.getAcoustidFingerprint()

        self.isValid = True