设为首页 收藏本站
查看: 749|回复: 0

[经验分享] python版的读取声音文件到常量数组

[复制链接]

尚未签到

发表于 2017-5-6 10:01:56 | 显示全部楼层 |阅读模式
  通常我们播放声音文件的时候会通过脚本读取所有的声音文件,然后放到数组里面,然后生成int型的索引,这样播放的时候就不直接传声音名字了,
  而是这样playMusic( MUICS_BG_1 }, playSound( SE_DOG ); 这样无论声音格式如何变化,代码都无需改变。
  之前都是Perl写的,这次为了和其他人保持一致改成python版的了,貌似没啥区别。贴代码备份
  总目录media,下列 video, music, sound 三个目录,分别是视频,背景音和音效
  

  #Auther: lancer
#Data: 2011-6-7
#Function: Get name of all media files from folder and process it, then write to another file as array format.
#Version: 1.00


#Modified
#Version: 1.01
#Data:


import os
import re
import shutil


media_path = "C:\\workspace\\bada\\PigeonSquadron\\trunk\\code\\res\\media\\"
to_process_file = "C:\\workspace\\bada\\PigeonSquadron\\trunk\\code\\src\\native\\inc\\bada\SoundEngine.h"


index_prefix = '#define '
max_suffix = '_MAPPING_COUNT'


print media_path




code_array_list = []


def add_define(name, filelist):
index = 0
code_array_list.append(index_prefix + '' + 'SOUND_NONE ' + str(-1) + '\n')
for file in filelist:
if not re.match('.svn\Z', file):
file = name + '_' + file.replace(' ','')
file = re.sub('(.mp3|.aac|.wma|.m4a|.xmf|.3ga|.mmf|.mid|.wav|.amr|.mp4)\Z', '', file)
file = file.upper()
file = index_prefix + file + ' ' + str(index) + '\n'
code_array_list.append(file)
index += 1
count = index_prefix + name.upper() + max_suffix + ' ' + str(index) + '\n\n'
code_array_list.append(count)

#static char* s_videoFiles[ VIDEO_MAPPING_COUNT ] =
#{
#"badaBI.mp4",
#};
def add_array(name, filelist):
start = 'static char* s_' + name + 'Files[ ' + name.upper() + max_suffix + ' ] = ' + '\n{\n'
end = '};\n\n'
code_array_list.append(start);
for file in filelist:
if not re.match('.svn\Z', file):
code_array_list.append(' "' + file + '",\n');
code_array_list.append(end);

def process_folder(name):
filelist = os.listdir(media_path+name)
#print filelist
add_define(name, filelist)
add_array(name, filelist)

#read files from media folder and compose to list
list_files = os.listdir(media_path)
#cmd = "dir /A-D /B"
#list_file = os.popen(cmd).readlines();
#print list_files
for folder in list_files:
if folder=='sound' or folder=='music' or folder=='video':
#print "found path:"+folder
process_folder(folder)
else:
print "useless folder: " + folder

#for line in code_array_list:
#print line


file_to_write = 'temp.txt'
ignore_input = False
#open code file that include sound list and replace it
readf = file(to_process_file, 'r') # open for read
writef = file(file_to_write, 'w') # open for write
while True:
line = readf.readline()
if len(line) == 0: # Zero length indicates EOF
break
#print line,
if not ignore_input:
writef.write(line) # write text to file
if re.match('\A//# sound list to be processed start', line):
ignore_input = True
else:
if re.match('\A//# sound list to be processed end', line):
ignore_input = False
for item in code_array_list:
writef.write(item)
writef.write(line) # write text to file
# Notice comma to avoid automatic newline added by Python
readf.close() # close the file
writef.close();


shutil.move(file_to_write, to_process_file)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373666-1-1.html 上篇帖子: Learn Python The Hard Way学习(32) 下篇帖子: Python内置字符串操作处理方法详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表