初级视频编辑室|草蜢非编论坛|初级视编室|草蜢视频编辑|会声会影|威力导演|电子相册

 找回密码
 加入初编室
搜索
查看: 1058|回复: 4
打印 上一主题 下一主题

[Director 多媒体爱好者] 声音控制详解(背景音乐)

[复制链接]

296

主题

1132

帖子

2万

积分

超级版主

Rank: 8Rank: 8

论坛版主精华帖勋章

跳转到指定楼层
楼主
发表于 2014-11-10 09:13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
onekey onekey
前言:director对于声音的管理实在是不敢恭维。
不知道是不是director的一个bug:
movie1里面sound(1)通道播放声音
从movie1跳转到movie2的话,声音继续播放(这也是我们想要的关于背景音乐的想法,看似director很好用帮我们解决了这个问题),不过这个时候你可以测试几个函数就会发现这里面好像有bug在,
sound(1).isbusy()=1
表示声音通道1有声音在播放
sound(1).status=0
表示声音通道1空闲
为什么会出现这种情况呢?我的理解是director对于每个影片都用了不同的8个声音管理通道,你从一个影片跳转到另一个影片的时候,这个时候director为你创建了另外8个声音通道出来,这或许是director的一个bug,因为有的人在跳转到不同的影片中需要使用同一个背景音乐,而有些人还要求控制这个背景音乐的播放暂停等,而这个时候你如果使用sound(1).pause()这个函数 确实可以停止掉当前播放的背景音乐,但是你再使用sound(1).play()这个函数的话就没有任何作用了,因为你刚才停止的是movie1里面的声音通道1,而你现在所在的movie2里面的声音通道1里面却什么都没有。不知道我是否讲清楚了这个问题。对于sound(1).isbusy()这个函数其实应该是正确的函数,错误的地方在于director对每个影片都用了不同的8个声音通道来管理,其实需要做的是对于每个projector用8个声音通道来管理就够了,这样就不会出现跳转到其它movie的时候sound(1).status=0这种事情了。

但是问题出来了总要想办法解决
问题:关于director里面播放背景音乐跳转movie暂停后不能重新播放的问题
解决的办法一:靠director自己来解决
因为到其它影片需要暂停之后再播放,而director又存在以上的bug(暂且称为bug,),所以我考虑用其它方法来解决,并且pause命令不可以用那我就自己建立背景音乐的状态信息,使用pause的时候就记录下来当是播放的时间并停止当前播放的音乐,重新播放的时候就从这个时候开始播放。
思路:建立一个父脚本来播放音乐,这样的好处是可以用一个脚本来控制音乐,不用每个影片都存在这样的脚本。用到的函数
queue() 播放声音的函数有很多种,但只有queue()可以从某个时间来播放(模拟暂停命令)
sound(channel).currenttime,这个函数用来记录声音播放的时间,暂停后就从这里播放,这里顺便说一下currenttime这个函数,它是可以设置也可以检测的,但是设置的时候会延时几秒种才执行,这也让我郁闷了一下,所以上面播放音乐的函数就只能用queue(),否则可以使用其它播放函数再设置currenttime就可以了。
sound(channel).play(),控制声音的播放
sound(channel).stop(),控制声音的停止
更具体的怎么个实现思路我就不写出来了,以下是代码源文件,大家可以看一下。




-- 对象方法:
--      Object.UpdateFile("声音文件地址",声音通道)     --更新背景音乐
--      Object.play()                                  --播放
--      Object.pause()                                 --暂停
--      Object.stop()                                  --停止
--      Object.unload()                                --声音对象卸载
--      Object.SetVolume(value)                        --设置通道音量大小
--      Object.GetVolume(soundchannel)                 --取得通道音量大小
-- 对象属性:
--      pMusicFile                                     --对象播放的声音文件地址
--      pChannel                                       --对象播放声音的通道
--      pSoundState                                    --对象的状态
--      pVolume                                        --对象的音量大小
--*使用说明:
-- 建立对象:BGM=New(script "BGMusci","声音文件地址",声音通道_默认为7)
-- 当不使用时卸载声音对象

楼主热帖
河边已是一首歌
回复

使用道具 举报

42

主题

3547

帖子

2万

积分

初编室元帅

Rank: 14Rank: 14Rank: 14Rank: 14

沙发
发表于 2014-11-10 10:42:44 | 只看该作者
这里就是学习的地方,真是不学不知道,一学吓一跳,知识太贫乏了。。

8

主题

543

帖子

2453

积分

初编室上尉

Rank: 6Rank: 6

板凳
发表于 2014-11-10 11:24:57 | 只看该作者
谢谢你提供的分享。

0

主题

1099

帖子

1万

积分

初编室元帅

Rank: 14Rank: 14Rank: 14Rank: 14

地板
发表于 2014-11-11 11:15:34 | 只看该作者
老师辛苦了,感谢分享!!!

131

主题

5683

帖子

11万

积分

初编室元帅

Rank: 14Rank: 14Rank: 14Rank: 14

帅哥会员活跃会员论坛万元户百帖纪念荣誉勋章

5#
发表于 2015-1-12 06:02:13 | 只看该作者
阳春白雪。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入初编室

本版积分规则

手机版|小黑屋|初级视频编辑室

GMT+8, 2024-6-16 14:53 , Processed in 0.073849 second(s), 30 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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