12
12
#import " LVHeads.h"
13
13
14
14
@interface LVAudioPlayer ()
15
+
15
16
@property (nonatomic ,assign ) BOOL playing;
17
+ @property (nonatomic , copy ) NSString *fileName;
18
+
16
19
@end
17
20
18
21
@implementation LVAudioPlayer {
@@ -44,16 +47,19 @@ -(id) init:(lua_State*) L{
44
47
}
45
48
46
49
-(void ) setPlayFileName0 : (NSString *) fileName bundle : (LVBundle*) bundle {
50
+
47
51
NSString * path = [bundle resourcePathWithName: fileName];
48
52
if ( path ) {
49
53
NSURL * url = [[NSURL alloc ] initWithString: path];
50
54
NSError * error = nil ;
51
55
audioPlayer = [[AVAudioPlayer alloc ] initWithContentsOfURL: url error: &error];// 使用本地URL创建
52
56
if ( error ) {
53
57
NSLog (@" [LuaView][error]%@ " ,error);
58
+ }else {
59
+ self.fileName = fileName;
54
60
}
55
61
}
56
- if ( self.playing ) {
62
+ if ( ! self.playing ) {
57
63
[self play ];
58
64
}
59
65
}
@@ -94,25 +100,26 @@ - (id) lv_nativeObject{
94
100
#pragma -mark AudioPlayer
95
101
96
102
static int lvNewAudioPlayer (lua_State *L) {
103
+
104
+ Class c = [LVUtil upvalueClass: L defaultClass: [LVAudioPlayer class ]];
105
+
106
+ LVAudioPlayer* player = [[c alloc ] init: L];
107
+ LuaViewCore* lview = LV_LUASTATE_VIEW (L);
108
+
97
109
if ( lua_gettop (L)>=1 ) {
98
- Class c = [LVUtil upvalueClass: L defaultClass: [LVAudioPlayer class ]];
99
-
100
- LVAudioPlayer* player = [[c alloc ] init: L];
101
- LuaViewCore* lview = LV_LUASTATE_VIEW (L);
102
110
NSString * fileName = lv_paramString (L, 1 );
103
111
[player setPlayFileName: fileName bundle: lview.bundle];
112
+ }
113
+
114
+ {
115
+ NEW_USERDATA (userData, AudioPlayer);
116
+ userData->object = CFBridgingRetain (player);
117
+ player.lv_userData = userData;
104
118
105
- {
106
- NEW_USERDATA (userData, AudioPlayer);
107
- userData->object = CFBridgingRetain (player);
108
- player.lv_userData = userData;
109
-
110
- luaL_getmetatable (L, META_TABLE_AudioPlayer );
111
- lua_setmetatable (L, -2 );
112
- }
113
- return 1 ;
119
+ luaL_getmetatable (L, META_TABLE_AudioPlayer );
120
+ lua_setmetatable (L, -2 );
114
121
}
115
- return 0 ;
122
+ return 1 ;
116
123
}
117
124
118
125
static int play (lua_State *L) {
@@ -121,6 +128,19 @@ static int play (lua_State *L) {
121
128
if ( user && LVIsType (user, AudioPlayer) ){
122
129
LVAudioPlayer* player = (__bridge LVAudioPlayer *)(user->object );
123
130
if ( player ){
131
+
132
+ if ( lua_gettop (L)>=2 ) {
133
+ NSString * fileName = lv_paramString (L, 2 );
134
+
135
+ if (![player.fileName isEqualToString: fileName]){
136
+ if (player.playing ){
137
+ [player stop ];
138
+ }
139
+ LuaViewCore* lview = LV_LUASTATE_VIEW (L);
140
+ [player setPlayFileName: fileName bundle: lview.bundle];
141
+ }
142
+ }
143
+
124
144
[player play ];
125
145
lua_pushvalue (L,1 );
126
146
return 1 ;
0 commit comments