11
11
#import " LView.h"
12
12
#import " LVHeads.h"
13
13
14
- @interface LVAudioPlayer ()
14
+ @interface LVAudioPlayer ()<AVAudioPlayerDelegate>
15
15
16
16
@property (nonatomic ,assign ) BOOL playing;
17
17
@property (nonatomic , copy ) NSString *fileName;
@@ -52,29 +52,33 @@ -(void) setPlayFileName0:(NSString*) fileName bundle:(LVBundle*) bundle{
52
52
if ( path ) {
53
53
NSURL * url = [[NSURL alloc ] initWithString: path];
54
54
NSError * error = nil ;
55
+ [self stop ];
55
56
audioPlayer = [[AVAudioPlayer alloc ] initWithContentsOfURL: url error: &error];// 使用本地URL创建
57
+ audioPlayer.delegate = self;
58
+
56
59
if ( error ) {
57
60
NSLog (@" [LuaView][error]%@ " ,error);
58
61
}else {
59
62
self.fileName = fileName;
60
63
}
61
64
}
62
- if ( !self.playing ) {
63
- [self play ];
64
- }
65
+
66
+ [self play ];
65
67
}
66
68
67
69
-(void ) setPlayFileName : (NSString *) fileName bundle : (LVBundle*) bundle {
68
70
if ( fileName ==nil )
69
71
return ;
70
72
if ( [LVUtil isExternalUrl: fileName] ){
73
+
74
+ __weak typeof (self) wself = self;
71
75
[LVUtil download: fileName callback: ^(NSData *fileData) {
72
76
NSString * suffix = [fileName componentsSeparatedByString: @" ." ].lastObject ;
73
77
NSData * theFileNameData = [fileName dataUsingEncoding: NSUTF8StringEncoding];
74
78
NSString * md5Path = [LVUtil MD5HashFromData: theFileNameData];
75
79
md5Path = [NSString stringWithFormat: @" %@ .%@ " ,md5Path,suffix];// Mp3文件一定要加后缀,否则无法播放
76
80
if ( [LVUtil saveData: fileData toFile: [LVUtil PathForCachesResource: md5Path]] ) {
77
- [self setPlayFileName0: md5Path bundle: bundle];
81
+ [wself setPlayFileName0: md5Path bundle: bundle];
78
82
}
79
83
}];
80
84
} else {
@@ -83,20 +87,25 @@ -(void) setPlayFileName:(NSString*) fileName bundle:(LVBundle*) bundle{
83
87
}
84
88
85
89
-(void ) play {
86
- [audioPlayer play ];
87
- self.playing = YES ;
90
+ if (!self.playing ){
91
+ [audioPlayer play ];
92
+ self.playing = YES ;
93
+ }
88
94
}
89
95
90
96
-(void ) stop {
91
97
[audioPlayer stop ];
92
98
self.playing = NO ;
93
99
}
94
100
101
+ - (void )audioPlayerDidFinishPlaying : (AVAudioPlayer *)player successfully : (BOOL )flag {
102
+ self.playing = NO ;
103
+ }
104
+
95
105
- (id ) lv_nativeObject {
96
106
return audioPlayer;
97
107
}
98
108
99
-
100
109
#pragma -mark AudioPlayer
101
110
102
111
static int lvNewAudioPlayer (lua_State *L) {
@@ -133,9 +142,7 @@ static int play (lua_State *L) {
133
142
NSString * fileName = lv_paramString (L, 2 );
134
143
135
144
if (![player.fileName isEqualToString: fileName]){
136
- if (player.playing ){
137
- [player stop ];
138
- }
145
+ [player stop ];
139
146
LuaViewCore* lview = LV_LUASTATE_VIEW (L);
140
147
[player setPlayFileName: fileName bundle: lview.bundle];
141
148
}
0 commit comments