python实现煲机脚本

生日的时候女票送了一副新耳机,还挺帅气。
装逼界的人都知道,新耳机是有“煲”这个步骤的
至于有没有效果?怎么煲?煲多久?这些问题都是耳机界常年争执的问题,各路高手分成各种门派常年杀伐不休,一不注意就可能引发圣战……
这都是背景

我一直以来都觉得自己是个“木耳”,也就是传说中的分不清音质好坏的家伙,属于耳机界的“麻瓜”
平时不小心勿入听音器材的论坛或者是淘宝店的评论区都能深刻地感觉到自己不但读书少,连身体器官的构造都和他们不同
你说隔音效果好我还能稍微理解一点
你说高频延伸不足缺乏动态延伸音场宽度不够人声比较靠前中频厚度好低频凝聚干净有力低频下潜深速度快无浓重染色
what the fuck???
但是,话又说回来,作为装逼界的成员,不煲机怎么显示我的牛逼?怎么证明耳机本身的牛逼?
机,还是得煲的

来,先看一下需求,卖耳机的客服发来的煲机步骤是这样的:
1.把耳机插在播放器上(这不是废话吗。。)
2.把白噪音和粉红噪音放在同一个播放列表,再选择“列表循环”模式(客服提供了白噪音和粉红噪音)
3.煲机累计180-200小时左右就可以煲好耳机,每次煲机2-4小时,耳机休息15分钟

前面两个步骤都很好理解也很好搞定,可是这是一个一两百个小时的工程,每隔几个小时还要休息十五分钟。
为什么是十五分钟呢?多一分钟少一分钟行不行呢?这些时间的差异对音质的好坏有影响吗?客服没有给答案。
但是很明显,这是一个精确的时间,十五分钟,这样一个精确的时间对于我来说简直是某种挑衅。
因为我是一个程序猿(自封的),还是一个喜欢钻牛角尖的程序猿,面对这种重复而又涉及精确数量的任务会产生一种怪异的偏执,这样你就知道为什么我从这该死的煲机步骤中感受到了恶意。

程序猿的困境还得用程序猿的方式来解决。
还会是什么,当然是代码啊!由于一直用的是python,于是自然而然想用python来实现这个东西。
需要实现煲机的功能,首先需要播放音频文件,也就是客服提供的白噪声和粉红噪声(连噪声的名字都这么萌)。在网上搜了一下python播放音乐的库,看到最多的就是pygame,好了就是它了!这其实是个比较强大的库,看它的名字就知道这是一个面向游戏制作的库,播放音频只是它提供的功能中很小的一部分,如果以后要写小游戏的话可以好好参考一下。当前的情况是需求驱动,我只需要研究我需要的那点功能就行了。于是阅读了这个库关于音乐播放的官方文档,简单易懂,说干就干。

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 10 12:49:28 2016
@author: pcbai
"""
import pygame,pygame.mixer#警察叔叔,就是这个库!
import time
import os
def get_songs(path):#获得文件夹中所有的音乐文件,以供播放的时候加载
    songList = []
    lstDir = os.listdir(path)
    for filename in lstDir:
        if filename[-4:].upper() == '.WAV'\
        or filename[-4:].upper() == '.MP3':
            songList.append(os.path.join(path, filename))
        elif '.' not in filename:#如果是文件夹的话,递归调用
            try:
                new_path = os.path.join(path, filename)
                get_songs(new_path)
            except WindowsError:
                continue
    return songList
def burn_in(path):#煲机的功能程序,基本实现了功能,当然还比较粗糙
    '''
    A program to burn in new earphone
    '''
    songList = get_songs(path)
    pygame.mixer.init(22050,-16,2,2048)#初始化播放器
    pygame.time.delay(1000)#等待1秒让mixer完成初始化
    print 'Start play music '
    count = 0
    while True:
        seconds = 0.0#记录所用的时间,如果小于900秒(120分钟),再播放一次文件夹
        loopStart = time.clock()        
        while seconds < 120*60.0:
            print "number of loops:",count
            for song in songList:#把整个文件夹播放一次
                try:
                    pygame.mixer.music.load(song)
                    print 'now playing',song
                    pygame.mixer.music.play()
                    while pygame.mixer.music.get_busy():
                        pass
                except RuntimeError:
                    print'Could not load...',song
                    continue
            count += 1
            seconds = time.clock() -loopStart
        print 'Now have a rest for 15 minutes'
        time.sleep(900)#每一轮播放完休息15分钟,900秒
if __name__=='__main__':
    burn_in_path = r'C:\Users\pcbai\Desktop\Pygame_notes\baoji'
    burn_in(burn_in_path)

现在只要传入音乐所在的文件夹就可以插在电脑上一路煲下去了,如丝般顺滑。
啊,解放,双手的解放,对于时间控制的解放!

posted @ 2017-03-01 15:23  木白的菜园  阅读(507)  评论(0编辑  收藏  举报