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)
现在只要传入音乐所在的文件夹就可以插在电脑上一路煲下去了,如丝般顺滑。
啊,解放,双手的解放,对于时间控制的解放!
python实现煲机脚本的更多相关文章
- 基于python的堡垒机
一 堡垒机的架构 堡垒机的核心架构通常如下图所示: 二.堡垒机的一般执行流程 管理员为用户在服务器上创建账号(将公钥放置服务器,或者使用用户名密码) 用户登陆堡垒机,输入堡垒机用户名密码,显示当前用户 ...
- 在.bashrc中,使用python获取本机IP地址(现在只支持wlan)
其实最好的办法是写个单独的脚本去查找IP,但是如果实在不愿意单写一个脚本文件,也可以直接将代码嵌入.bashrc中 在~/.bashrc下加入下面这行代码即可使用python获取本机的wlan的IP地 ...
- 转:python常用运维脚本实例
python常用运维脚本实例 转载 file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函 ...
- python常用运维脚本实例【转】
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...
- python编写DDoS攻击脚本
python编写DDoS攻击脚本 一.什么是DDoS攻击 DDoS攻击就是分布式的拒绝服务攻击,DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式.单一的DoS攻击一般是采用一对一方式的, ...
- python 暴力破解密码脚本
python 暴力破解密码脚本 以下,仅为个人测试代码,环境也是测试环境,暴力破解原理都是一样的, 假设要暴力破解登陆网站www.a.com 用户 testUser的密码, 首先,该网站登陆的验证要支 ...
- python获取本机IP、mac地址、计算机名
在python中获取ip地址和在php中有很大不同,在php中往往比较简单.那再python中怎么做呢? 我们先来看一下python 获得本机MAC地址: 1 2 3 4 import uuid de ...
- 一个好用的Python备份mysql的脚本
前几天打算用Python写一个mysql脚本,上Google看了下老外写的,写的挺好的,原地址在http://tecadmin.net/python-script-for-mysql-database ...
- 用Python写的简单脚本更新本地hosts
这两天Google墙得严重,于是就产生了做个一键更新hosts的脚本的想法. 由于正在学习Python,理所当然用Python来写这个脚本了. 接触比较多的就是urllib2这个库,习惯性的impor ...
随机推荐
- Linux基础进程管理优先级
一.进程优先级 Linux进程调度及多任务 每个cpu(或者cpu核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的cpu及核心数量.Li ...
- (一)Mybatis基本配置,Statement方式,动态代理增删改查
首先明白Mybatis是干什么的,之前使用jdbc操作数据库时候要写很多语句,获取光标,连接,获取具体对象进行相应操作,代码过于繁琐,所以现在有了Mybatis,它将这个操作整合在了一起,你不需要关心 ...
- k8s+istio:流量控制之灰度发布
通过Kubernetes+Istio的流量控制实现灰度发布,主要演示通过流量权重实现蓝绿,通过http自定义头实现金丝雀 准备环境 k8s和istio不想自己装的话可以在云上买个按量付费集群,用完即删 ...
- 12、面向对象的思想(OOP)
面向对象与面向过程 1.都是解决问题的思维方式,都是代码的组织的方式: 2.解决简单的问题可以使用面向过程: 3.解决复杂的问题建议使用面向对象,微观处理依旧会使用面向过程. 对象的进化史(数据管理的 ...
- java并发编程(十七)----(线程池)java线程池架构和原理
前面我们简单介绍了线程池的使用,但是对于其如何运行我们还不清楚,Executors为我们提供了简单的线程工厂类,但是我们知道ThreadPoolExecutor是线程池的具体实现类.我们先从他开始分析 ...
- android ——可折叠式标题栏
CollapsingToolbarLayout是一个作用于Toolbar上的布局,可以让Toolbar的效果变得更加丰富: 但是CollapsingToolbarLayout是不能独立存在的,它这能作 ...
- scapy构造打印ARP数据包
ARP格式: 用于以太网的ARP请求/应答分组格式 各字段含义: 帧类型:表示数据部分用什么协议封装(0800表示IP,0806表示ARP,8035表示RARP). 硬件类型:表示硬件地址的类型(其中 ...
- 记录一则AIX使用裸设备安装OracleRAC的问题
需求背景:在AIX6.1上安装Oracle 10g RAC,一线工程师反馈节点2运行root脚本无法成功,跟进排查发现实际上底层存储磁盘的准备工作就存在问题. 客户要求底层存储选用裸设备方式,所以必须 ...
- Flume日志采集框架的使用
文章作者:foochane 原文链接:https://foochane.cn/article/2019062701.html Flume日志采集框架 安装和部署 Flume运行机制 采集静态文件到h ...
- egret之好友列表(滑动列表)
本文采用List+Scroller实现列表滑动功能 首先新建两个皮肤,一个用做好友界面的显示,一个用作单个好友的显示,新建皮肤如下: 皮肤一取名为:wxMainSkin,添加如下控件 皮肤一取名为:w ...